Я хотел бы изменить файл setup.py таким образом, что команда "python setup.py build" компилирует модуль расширения на основе C, который статически (а не динамически) связан с библиотекой.
В настоящее время расширение динамически связано с несколькими библиотеками. Я бы хотел оставить все без изменений, за исключением статической привязки только к одной библиотеке. Я успешно сделал это, вручную изменив вызов gcc, который запускает distutils, хотя для этого я должен явно указать зависимые библиотеки.
Возможно, это слишком много информации, но для ясности это заключительная команда связывания, которая была выполнена во время "сборки python setup.py" script:
gcc -pthread -shared -L/system/lib64 -L/system/lib/ -I/system/include build/temp.linux-x86_64-2.7/src/*.o -L/system/lib -L/usr/local/lib -L/usr/lib -ligraph -o build/lib.linux-x86_64-2.7/igraph/core.so
И это моя модификация вручную:
gcc -pthread -shared -L/system/lib64 -L/system/lib/ -I/system/include build/temp.linux-x86_64-2.7/src/*.o -L/system/lib -L/usr/local/lib -L/usr/lib /system/lib/libigraph.a -lxml2 -lz -lgmp -lstdc++ -lm -ldl -o build/lib.linux-x86_64-2.7/igraph/core.so
Раздел 2.3.4 Распространение модулей Python обсуждает спецификацию библиотек, но подходит только "library_dirs", и эти библиотеки динамически связаны.
Я использую среду Linux для разработки, но пакет также будет скомпилирован и установлен в Windows, поэтому переносное решение - это то, что мне нужно.
Может кто-нибудь сказать мне, где искать инструкции или как изменить setup.py script? (Спасибо заранее!)
Я новичок в StackOverflow, поэтому извиняюсь, если я не правильно отметил этот вопрос, или если я сделал какую-то другую ошибку в этой публикации.