python - Cython 编译失败,/usr/bin/ld : cannot find

标签 python c linux gcc cython

遇到错误说明:

/usr/bin/ld: cannot find -lnumsolver
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

运行时:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

setup(
ext_modules = cythonize(Extension("cy_rbisect",
            ["cy_rbisect.pyx"],
            library_dirs=['../clib'],
            libraries=['numsolver']))
)

我的“库文件”是 numsolver.h、numsolver.c、numsolver.o、numsolver.so

使用 Cython 文件:cy_rbisect.pxd、cy_rbisect.pyx。

我已经运行了 export LD_LIBRARY_PATH='/path/to/numsolver.so' 所以我不确定我哪里出错了... 我的代码以前确实有效,但后来我重命名了所有文件,分别更新了 header/c/pyx/pxd 文件并重新编译。从那以后它一直没有工作。

最佳答案

编辑

我自己没有用过cython,但我发现了这个:Using Cython To Link Python To A Shared Library

这可能会帮助您使用自定义共享库编写正确的 setup.py。我的旧答案针对的是关于如何编译和链接共享库的通用解决方案。


(旧答案)

你是如何编译你的库的?为了让链接器在非标准路径中找到您的库,您必须使用 -L 选项。所以 gcc 命令应该是这样的:

gcc <your *.o files> <your other options> -L /path/to/ -lnumsolver

LD_LIBRARY_PATH 必须包含您的库所在的目录路径。并且文件名必须以 lib 开头。因此,将您的 so 文件重命名为 /path/to/libnumsolver.so 并设置 LD_LIBRARY_PATH='/path/to/。尝试执行代码时应使用此变量。

看看Shared libraries with GCC on Linux

关于python - Cython 编译失败,/usr/bin/ld : cannot find,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48099216/

相关文章:

python - sshtunnel 无法识别私钥密码

linux - 使用 Sed 从日志文件中提取 XML 内容并将每个结果转储到不同的文件

java - 从 PHP 脚本调用 Swing Java 应用程序

c++ - 在 .so 库中使用 C++ 类

python - Scrapy Xpath 输出为空

python : Appending values to existing spreadsheet from updated values

python - re.search 返回空元组

c - C 中评估后递增变量

c - 二进制炸弹阶段 4 内存位置

使用 #define 和 argv[] 比较指针和整数警告