Jestem początkującym dla distutils i mam problem, który naprawdę mnie utknął. Ja kompilowania pakietów, które wymagają rozszerzenia, tak zrobię rozszerzenie tak:Zależności bibliotek współdzielonych z 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"],
)
I następnie uruchomić metodę konfiguracji:
setup(name="apackage", version="7.2",
package_dir = {'':instdir+'/a/b/python'},
packages=['apackage','package.tests'],
ext_modules=[hoc_module]
)
Dystrybucja opakowanie jest wykonane prawidłowo i mogę „setup python .py zainstalować”w porządku, ale gdy próbuję i zaimportować pakiet pojawia się błąd ImportError: liba.so.0: cannot open shared object file: No such file or directory
Zdaję sobie sprawę, że kiedy dodać lokalizację liba.so.0 do mojego LD_LIBRARY_PATH program działa poprawnie. Niestety nie napisałem tych modułów i nie mam dobrej wiedzy na temat kompilacji. Próbowałem to rozgryźć przez kilka dni bezskutecznie.
UPDATE: Próbowałem przechodzącą liba.a, libb.a etc pliki extra_objects ale to nie działa, generując następujące errror: liba.a: Nie można odczytać symbole: zła jakość collect2: ld zwrócił 1 status wyjścia. Próbuję skompilować moduł Pythona, który wymaga kompilacji biblioteki, która sama zależy od innych bibliotek, które muszę w jakiś sposób uwzględnić w pakiecie. Podejrzewam, że mój problem jest bardzo podobny do tego: http://mail.python.org/pipermail/distutils-sig/2009-February/010960.html, ale to jeden nie został rozwiązany, myślałem, że być może odkąd ma dwa lata, znaleziono rezolucję?
UPDATE 2: Na razie mam to rozwiązać wykonując:
data_files=[('/usr/local/lib', glob.glob('unix/x86_64/lib/*'))]
To znaczy, jestem kopiowanie bibliotek muszę w/usr/local/lib. Nie jestem jednak bardzo zadowolony z tego rozwiązania, między innymi dlatego, że wymaga on od moich użytkowników uprawnień roota, a także dlatego, że nadal może nie działać dystrybucja Redhatów. Jeśli więc ktoś może zaproponować coś lepszego niż ta poprawka, proszę daj mi znać.
Fantastyczna odpowiedź, łącząc odpowiedź z tym http: // sebsauvage. net/python/mingw.html Udało mi się zbudować potrzebny moduł dokładnie w wymagany sposób. Dziękuję bardzo. –
Nie ma problemu, cieszę się, że mogłem pomóc –
FYI: Zamiast dodawać opcję '-R '$ ORIGIN /../ lib /'', można dodać 'runtime_library_dirs =" $ ORIGIN /../ lib/"do twojej definicji" Extension "(w praktyce robi to samo). –