【问题标题】:Cython fails to compile, /usr/bin/ld: cannot findCython 编译失败,/usr/bin/ld: 找不到
【发布时间】:2018-01-04 16:11:31
【问题描述】:

遇到错误说明:

/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 文件并重新编译。从那以后它一直没有工作。

【问题讨论】:

    标签: python c linux gcc cython


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多