遇到错误说明:
/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。
我已经运行了导出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