Я новичок в 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]
)
Распределение пакетов выполняется правильно, и я могу "установить python setup.py" отлично, но когда я пытаюсь импортировать мой пакет, я получаю сообщение об ошибке
ImportError: liba.so.0: cannot open shared object file: No such file or directory
Я понимаю, что когда я добавляю местоположение liba.so.0 в мою LD_LIBRARY_PATH, программа работает нормально. К сожалению, я не написал эти модули и не очень хорошо разбираюсь в компиляции. Я пытался понять это в течение нескольких дней безрезультатно.
ОБНОВЛЕНИЕ. Я пробовал передавать файлы liba.a, libb.a и др. в extra_objects, но это не сработало, генерировав следующее errror: liba.a: не удалось прочитать символы: Плохое значение collect2: ld возвращает 1 статус выхода. То, что я пытаюсь сделать, это пакетный модуль python, который требует компиляции библиотеки, которая сама зависит от других библиотек, которые мне нужно каким-то образом включить в пакет. Я подозреваю, что моя проблема очень похожа на эту: http://mail.python.org/pipermail/distutils-sig/2009-February/010960.html, но этот вопрос не был разрешен, я подумал, возможно, с тех пор, как ему было два года, была найдена резолюция?
ОБНОВЛЕНИЕ 2. На данный момент я решил это, выполнив:
data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]
То есть, я копирую библиотеки, которые мне нужны, в /usr/local/lib. Однако я не очень доволен этим решением, не в последнюю очередь потому, что он требует, чтобы мои пользователи имели права root, а также потому, что это может все еще не работать с дистрибутивами Redhat. Поэтому, если кто-нибудь может предложить что-то лучше этого исправления, пожалуйста, дайте мне знать.