Зависимости общих библиотек от 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]
)

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

17
задан Mike Vella 22 March 2012 в 02:26
поделиться