GNU ld не может найти библиотеку, которая там есть - PullRequest
8 голосов
/ 11 июля 2010

Пакеты, с которыми я здесь играю, довольно неизвестны, но, тем не менее, проблема довольно общая.По сути, я пытаюсь скомпилировать модуль Python (называемый rql) с расширением C ++.Расширение использует внешний каркас, называемый 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 ]

13 голосов
/ 11 июля 2010

LD_LIBRARY_PATH - для компоновщика / загрузчика времени выполнения (тот же эффект может быть достигнут с помощью ldconfig). Вам нужен флаг -L:

-L/home/red/usr/lib

в командной строке компилятора.

Edit:

И - спасибо @bjg за напоминание - вы можете использовать LIBRARY_PATH, если не хотите связываться с параметрами компилятора.

1 голос
/ 11 июля 2010

Вы, очевидно, изменили LD_LIBRARY_PATH, чтобы указать на нестандартное расположение в вашем домашнем каталоге.Знаете ли вы, если LD_LIBRARY_PATH в среде, используемой для вызова g ++ в setup.py, соответствует среде вашей оболочки?

Проверьте, можете ли вы передать аргументы setup.py для изменения пути к библиотеке или просто передать -L/home/red/usr/libдо g ++.

...