Я пытаюсь написать расширение C++ для python, которое включает API Python C. Согласно моему предыдущему опыту в этом отношении с Visual Studio, мне просто нужно включить заголовочные файлы python и связать статические библиотеки python, и все будет работать нормально.Как связать статическую библиотеку python для расширений C?
Однако я не мог сделать это на OS X Mavericks сейчас. Я установил отдельный Python 3.4.2 из python.org и добавил запись включения в мою конфигурацию Cmake: include_directories("/Library/Frameworks/Python.framework/Versions/3.4/Headers")
Тогда я не знаю, как продолжить статическую библиотеку. В Windows они хранятся в %python_root%/libs
, и вы можете найти .lib
файлов. Но на OS X я не мог найти такой каталог, в котором размещены статические библиотеки .a
.
Я попробовал несколько решений, такие как прикрепление результата python-config --lib
для опции компиляции и set(CMAKE_BUILD_TYPE Release)
в то время как все они в конечном итоге со следующей ошибкой:
Undefined symbols for architecture x86_64:
"_PyLong_FromLong", referenced from:
test() in Main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я попытался distutils
, как хорошо, но это не кажется, работать должным образом, либо :(
* Где * вы установили флаги/библиотеки, возвращаемые 'python-config -libs'? К какой переменной? Поскольку эти флаги являются флагами * linker *, а не флагов компилятора. –
Я установил их в 'CMAKE_CXX_FLAGS' в' cmake.txt', и полученный результат был похож на '-ldl -framework CoreFoundation -lpython3.4m'. –
Добавление библиотек в флагов компилятора не помогает, поскольку они используются только для компиляции, вы должны добавить их, например. 'CMAKE_EXE_LINKER_FLAGS'. Затем они также будут добавлены в правильное место в командной строке компоновщика (где имеет место вопрос об объекте/исходных файлах и библиотеках). –