GNU ld找不到那里的库

时间:2010-07-10 23:12:52

标签: c++ linker shared-libraries ld library-path

我在这里玩的包很不为人知,但问题却很普遍。基本上,我正在尝试使用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

2 个答案:

答案 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 ++。