Я новичок в 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 install" нормально, но когда я пытаюсь импортировать мой пакет, я получаю ошибку
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, но это не сработало, из-за чего произошла следующая ошибка: 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. Поэтому, если кто-то может предложить что-то лучше, чем это исправление, пожалуйста, дайте мне знать.