2015-02-21 3 views
0

Я пытаюсь написать расширение 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, как хорошо, но это не кажется, работать должным образом, либо :(

+0

* Где * вы установили флаги/библиотеки, возвращаемые 'python-config -libs'? К какой переменной? Поскольку эти флаги являются флагами * linker *, а не флагов компилятора. –

+0

Я установил их в 'CMAKE_CXX_FLAGS' в' cmake.txt', и полученный результат был похож на '-ldl -framework CoreFoundation -lpython3.4m'. –

+0

Добавление библиотек в флагов компилятора не помогает, поскольку они используются только для компиляции, вы должны добавить их, например. 'CMAKE_EXE_LINKER_FLAGS'. Затем они также будут добавлены в правильное место в командной строке компоновщика (где имеет место вопрос об объекте/исходных файлах и библиотеках). –

ответ

0

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

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

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

file: libpython2.7.a 
+0

Спасибо, и теперь это работает :) Я думал, что каталог статической библиотеки будет содержать много файлов '.a', как это было в Windows, но здесь все совсем другое. –