如何让Cython使用正确的共享库

  • 本文关键字:共享 Cython python cython
  • 更新时间 :
  • 英文 :


我目前正在尝试为C库编写一个包装器。它在本地运行得很好,但必须在我没有管理权限的远程服务器上运行。C库和include文件的编译版本在一个已知的文件夹中可用,我在下文中将其表示为/correct/folder。我首先尝试使用setup.py,通过设置相关参数来指定库的位置,即

setup(
ext_modules = cythonize([Extension("frlib", ["frlib.py"],
include_dirs=["/correct/folder/include"],
library_dirs=["/correct/folder/lib"],
libraries=["<name>"])])
)

这就是它变得一团糟的地方。已经有一个现有的(不令人满意的(python包在使用该库,它拥有该库的编译版本,这是一个过时的版本。许多sysconfig变量都指向包含这个过时库的文件夹,所以当我使用setup.py时,gcc命令会不可变地链接到不正确的库(传递了一些-L/wrong/folder参数(。为了绕过这一点,我自己运行了gcc命令,删除了对/error/folder的所有引用。当我运行ldd <name>.so命令时,我会看到为C库列出的正确文件夹;然而它也出现在";未使用的运行时库";在CCD_ 4中。当我导入Python库并使用C命令获取该库的版本时,它显示为错误的版本。

我假设它一定来自cython或gcc使用的环境变量,但实际上无法理解它何时发挥作用。我把-L/correct/folder-Wl,-rpath-link,/correct/folder都添加到了gcc中,所以这不应该被覆盖,对吧?此外,正确的路径在$LD_LIBRARY_path中。当Cython将.py转换为.c时,会出现这种情况吗?除了ldd,还有其他工具可以帮助我诊断吗?

好吧,设法做到了(当然,总是在发布问题之后…(。

必须使用-Wl,-rpath,/correct/folder而不是-Wl,-rpath-link,/correct/folder

相关内容

  • 没有找到相关文章

最新更新