【问题标题】:Embedding Python in C++ libraries在 C++ 库中嵌入 Python
【发布时间】:2011-07-01 22:58:12
【问题描述】:

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

对于头文件,我有

#include <Python.h>

我会初步尝试,

$g++ EmbeddedPython.cpp

但最终会得到

EmbeddedPython.cpp:1:20: error: Python.h: No such file or directory
EmbeddedPython.cpp: In function ‘int main(int, char**)’:
EmbeddedPython.cpp:6: error: ‘Py_Initialize’ was not declared in this scope
....

然后我尝试了

g++ EmbeddedPython.cpp -I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5

这消除了前两个错误,但我仍然结束了

 Undefined symbols:
  "_Py_Initialize", referenced from:
  _main in ccxJAUAB.o

我对此有点陌生,但我认为我学得很快。我相信我需要“链接”一个图书馆,对吧​​?但是哪一个以及如何?我需要动态的还是静态的?

我正在使用 MacBook Pro。

【问题讨论】:

  • 我还有一个macbook pro,python2.5,python2.6和python2.7。
  • 让我添加了 /usr/lib/libpython.dylib

标签: c++ python linker embedding


【解决方案1】:

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

【讨论】:

  • 成功了,谢谢。还有什么我可以输入的,这样我就不必输入 -I/System/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5
  • 我不知道苹果的 gcc 对框架做了什么。如果“-framework Python”没有解决这个问题,那么我认为你会被你所拥有的东西所困扰。
  • 对于较新版本的python,它应该是“-lpythonX.Y”,其中X.Y是python版本。例如,对于 python 3.8,它应该是“-lpython3.8”。
猜你喜欢
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多