我在这里玩的包很不为人知,但问题却很普遍。基本上,我正在尝试使用C ++扩展编译Python模块(称为rql)。该扩展使用称为gecode的外部框架,其中包含多个库。我编译了gecode并在本地安装。现在,让输出说明一切:
red@devel:~/build/rql-0.23.3$ echo $LD_LIBRARY_PATH
/home/red/usr/lib
red@devel:~/build/rql-0.23.3$ ls $LD_LIBRARY_PATH | grep libgecodeint
libgecodeint.so
libgecodeint.so.22
libgecodeint.so.22.0
red@devel:~/build/rql-0.23.3$ python setup.py build
running build
running build.py
package init file './test/__init__.py' not found (or not a regular file)
running build_ext
building 'rql_solve' extension
g++ -pthread -shared build/temp.linux-i686-2.5/gecode-solver.o -lgecodeint -lgecodekernel -lgecodesearch -o build/lib.linux-i686-2.5/rql_solve.so
/usr/bin/ld: cannot find -lgecodeint
collect2: ld returned 1 exit status
error: command 'g++' failed with exit status 1
答案 0 :(得分:13)
LD_LIBRARY_PATH
用于运行时链接程序/加载程序(使用ldconfig
可以实现相同的效果)。你需要的是-L
标志:
-L/home/red/usr/lib
在编译器命令行上。
并且 - 感谢@bjg提醒我 - 如果你不想搞乱编译器选项,可以使用LIBRARY_PATH
。
答案 1 :(得分:1)
您显然已将LD_LIBRARY_PATH
修改为指向主目录中的非标准位置。您是否知道用于在setup.py中调用g ++的环境中的LD_LIBRARY_PATH
是否与您的shell环境相匹配?
查看是否可以将参数传递给setup.py
以修改库路径,或者只是将-L/home/red/usr/lib
传递给g ++。