Как связать статическую библиотеку Python для расширений C?

Я пытаюсь написать расширение C ++ для Python, которое включает в себя Python C API. Согласно моему предыдущему опыту работы с Visual Studio, мне просто нужно включить заголовочные файлы python и связать статические библиотеки python, и все будет работать нормально.

Однако я не мог сделать это на 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 также, но, похоже, он тоже не работал должным образом 🙁

0

Решение

Вы получаете ошибку компоновщика, библиотека не была добавлена ​​к вашим параметрам ссылки.

В моей системе OSX 10.8.5 статическая библиотека находится в каталоге ниже:
Вам нужно добавить каталог в путь к вашей библиотеке cmake и добавить саму библиотеку python. (В GCC вы используете опции -L и -l).

Directory: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/

file: libpython2.7.a
0

Другие решения


По вопросам рекламы [email protected]