嵌入C ++时如何链接正确的python版本?

时间:2019-04-16 09:06:38

标签: python c++ macos python-3.7 python-embedding

我在C ++代码中嵌入了python解释器。对于以下方面的高级方法,它工作正常:

PyRun_SimpleFileEx(fd, "/file_path/some_script.py", 1)

但是我需要将一些参数传递给python代码,因此我尝试着从python documentation中获取有关嵌入的一些代码。但是,XCode抱怨一些未定义的功能。我的猜测是我的

#include <Python/Python.h>

不添加正确的python版本,并且可能指向的系统版本(2.7)没有带有正确功能的标头。

我的链接器标志是:

-lpython3.7m -ldl -framework CoreFoundation

我将框架中的Python include文件夹添加到标题搜索路径:

../../Support/Lib/Python/include

以及从框架到库搜索路径的Python Lib文件夹:

../../Support/Lib/Python/lib

support文件夹类似于解决方案中指向的文件夹。

XCode找不到的功能是PyUnicode_DecodeFSDefault()Py_FinalizeEx()

第一个是在unicodeobject.h中定义的,如上所述,它必须包含在必须包含在include文件夹中的位置Python.h的右边。

我不确定自己在做什么错,所以也许有人可以指出我正确的方向。预先感谢!

1 个答案:

答案 0 :(得分:0)

好吧,就像魔鬼一直在细节中一样... 我发现我只需要直接传递完整路径,直到我需要的头文件的顶层目录即可。不搜索子目录。所以我的标题搜索路径是:

../../Support/Lib/Python/include/python3.7m

和我的图书馆搜索路径:

../../Support/Lib/Python/lib/python3.7 and then just include

包括我终于可以了:

#include <Python.h>