Я новичок в distutils, и у меня есть проблема, которая действительно застряла. Я компиляции пакета, который требует расширения, так что я сделать расширение таким образом:Общие зависимости библиотек от distutils
a_module = Extension(
"amodule",
["initmodule.cpp"],
library_dirs=libdirs,
extra_objects = [
"unix/x86_64/lib/liba.so"
"unix/x86_64/lib/lib.so",
"unix/x86_64/lib/libc.so"],
)
Затем я запустить метод установки:
setup(name="apackage", version="7.2",
package_dir = {'':instdir+'/a/b/python'},
packages=['apackage','package.tests'],
ext_modules=[hoc_module]
)
Распределение пакета сделан правильно, и я могу «установки питона .py установить»нормально, но когда я пытаюсь импортировать мой пакет, я получаю сообщение об ошибке ImportError: liba.so.0: cannot open shared object file: No such file or directory
Я понимаю, что когда я добавляю расположение liba.so.0 моей LD_LIBRARY_PATH программа работает нормально. К сожалению, я не написал эти модули и не очень хорошо разбираюсь в компиляции. Я пытался понять это в течение нескольких дней безрезультатно.
UPDATE: Я попытался прохождения liba.a, libb.a и т.д. файлы extra_objects, но это не сработало, генерируя следующий errror: liba.a: не может прочитать символы: Плохое значение collect2: л.д. вернулся 1 статус выхода. То, что я пытаюсь сделать, это пакетный модуль python, который требует компиляции библиотеки, которая сама зависит от других библиотек, которые мне нужно каким-то образом включить в пакет. Я подозреваю, что моя проблема очень похожа на эту: http://mail.python.org/pipermail/distutils-sig/2009-February/010960.html, но это один не был разрешен, я подумал, возможно, с тех пор, как ему исполнилось два года, была найдена резолюция?
UPDATE 2: На данный момент я решил это делать:
data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]
То есть, я копирую библиотеки мне нужно в/USR/местные/Библиотека. Однако я не очень доволен этим решением, не в последнюю очередь потому, что он требует, чтобы мои пользователи имели права root, а также потому, что это может все еще не работать с дистрибутивами Redhat. Поэтому, если кто-нибудь может предложить что-то лучше этого исправления, пожалуйста, дайте мне знать.
Фантастический ответ, объединив свой ответ с этим http: // sebsauvage. net/python/mingw.html Я смог построить необходимый модуль именно так, как нужно. Огромное спасибо. –
Не проблема, я рад, что смог помочь –
FYI: вместо добавления опции -R '$ ORIGIN /../ lib /' 'вы можете добавить' runtime_library_dirs = "$ ORIGIN /../ lib/«' к вашему определению «Расширение» (он делает то же самое на практике). –