将 Python 嵌入 C++ 库

cst*_*sta 5 c++ python linker embedding

我正在努力将 Python 嵌入到一些 C++ 代码中,但我在编译它时遇到了困难。

\n\n

对于头文件,我有

\n\n
#include <Python.h>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我会初步尝试,

\n\n
$g++ EmbeddedPython.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

但最终会得到

\n\n
EmbeddedPython.cpp:1:20: error: Python.h: No such file or directory\nEmbeddedPython.cpp: In function \xe2\x80\x98int main(int, char**)\xe2\x80\x99:\nEmbeddedPython.cpp:6: error: \xe2\x80\x98Py_Initialize\xe2\x80\x99 was not declared in this scope\n....\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我尝试了

\n\n
g++ EmbeddedPython.cpp -I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5\n
Run Code Online (Sandbox Code Playgroud)\n\n

这消除了前两个错误,但我仍然得到了

\n\n
 Undefined symbols:\n  "_Py_Initialize", referenced from:\n  _main in ccxJAUAB.o\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对此有点陌生,但我认为我学得很快。我相信我需要“链接”一个库,对吗?但是哪一个以及如何实现呢?我需要动态的还是静态的?

\n\n

我正在使用 MacBook Pro 工作。

\n

aks*_*lle 5

您需要链接 libpython。UNIX 程序员在链接命令中使用“-lpython”(即在“g++”命令的末尾)来执行此操作。在 Mac 上,我认为它会是“-framework Python”。