Cython无法编译,/ usr / bin / ld:无法找到

问题描述 投票:1回答:1

遇到错误说明:

/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'所以我不确定我在哪里错了...我的代码以前工作但后来我重命名所有文件更新了标题/ c / pyx / pxd文件分别重新编译。从那时起它一直没有奏效。

python c linux gcc cython
1个回答
1
投票

编辑

我自己没有使用过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

© www.soinside.com 2019 - 2024. All rights reserved.