Пакеты, с которыми я играю здесь, довольно неизвестны, но тем не менее проблема довольно универсальна. В основном я пытаюсь скомпилировать модуль 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
LD_LIBRARY_PATH
предназначен для компоновщика / загрузчика времени выполнения (того же эффекта можно добиться с помощью ldconfig
). Вам нужен флаг -L
:
-L/home/red/usr/lib
в командной строке компилятора.
И - спасибо @bjg за напоминание - вы можете использовать LIBRARY_PATH
, если не хотите связываться с параметрами компилятора.
Очевидно, вы изменили LD_LIBRARY_PATH
, чтобы указать на нестандартное расположение в вашем домашнем каталоге. Знаете ли вы, соответствует ли LD_LIBRARY_PATH
в среде, используемой для вызова g ++ в setup.py среде вашей оболочки?
Посмотрите, можете ли вы передать аргументы в setup.py
для изменения библиотеки путь или просто передайте -L / home / red / usr / lib
в g ++.