设置 Xcode 标志以便将 python 嵌入我的C++项目中
Set Xcode flags in order to embed python in my C++ project
我正在尝试将python嵌入到我的C++项目中。我需要这样做才能使用一些实现柯尔莫哥罗夫-斯米尔诺夫测试的函数,这些函数在C++中不可用。
现在我只是想看看Xcode是否能够链接和编译一个嵌入Python的简单程序。 我尝试编译的代码如下:
#include<Python/Python.h>
int main(int argc, const char * argv[]) {
Py_Initialize();
PyObject* variable;
Py_Finalize();
return 0;
}
据我从这里阅读的说明中可以理解: 1. 在另一个应用程序中嵌入 Python - 1.6 在类 Unix 系统下编译和链接,在这里: Python/C API 参考手册 - 简介 为了编译它,我必须向编译器和链接器添加一些额外的标志。
为了找出我应该添加哪些标志,我在终端中运行了以下两个命令(其中包括相应的输出):
$ python3.6-config --cflags
-I/Users/user/anaconda3/include/python3.6m -I/Users/user/anaconda3/include/python3.6m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/user/anaconda3/include -arch x86_64 -I/Users/user/anaconda3/include -arch x86_64
$ python3.6-config --ldflags
-lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation
我用user
替换了用户文件夹的实际名称。
现在,为了将这些标志添加到 Xcode 编译器和链接器中,我转到了我的项目设置窗口,在Build Settings -> Other C Flags
和Build Settings -> Other Linker Flags
下,我添加了上面报告的标志。
但是当我编译时,我收到此错误:
Apple Mach-O Linker (ld) Error Group
clang: error: linker command failed with exit code 1 (use -v to see invocation)
即使我注释了main
函数中的所有行,它也不会消失,除了return 0
.
我不明白我做错了什么。
我正在使用Xcode 8.3.2
,我的 Python 发行版是:Python 3.6.1 |Anaconda 4.4.0
好的,我想我已经找到了解决方案。不确定它是否真的是正确的(因为我不是专家,我真的不明白现在它起作用的原因),但无论如何我都会发布它。
问题是,如果您查看此页面中的说明:1. 在另一个应用程序中嵌入 Python - 1.6。在类Unix系统下编译和链接,您可以看到在执行命令python3.6-config --ldflags
时,输出包含一个标志-L/opt/lib/python3.4/config-3.4m
而在我的情况下则不包含。
因此,在弄清楚给我链接错误的标志是-lpython3.6m
之后,我认为可能是由于链接器找不到我的python发行版所在的目录或类似的东西。
所以我在我的硬盘驱动器中查找了一个文件夹的路径,该文件夹的名称与网页上显示的名称相似,我发现/Users/user/anaconda3/lib/python3.6/config-3.6m-darwin
是一个文件夹的路径,其名称与我正在寻找的名称非常相似,除了文件夹名称末尾的"-darwin"可能是因为我使用的是macOS发行版(也许这就是为什么命令python3.6-config --ldflags
没找到?我不知道)。
在此之后,我只是在Xcode的"其他liker Flags"的开头添加了-L/Users/user/anaconda3/lib/python3.6/config-3.6m-darwin
,并且所有内容(几乎)编译得很好。
我说"几乎"是因为我还必须在代码开头将include
从#include<Python/Python.h>
重命名为#include<Python.h>
(也许是因为通过使用第一个,我包含了系统默认的 Python 发行版,而第二个我包括了 Anaconda 发行版?同样,我不知道)。
无论如何,现在一切都编译得很好,所以我想分享我是如何做到的,以防其他人处于同样的情况。
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 为什么我的删除节点函数实际上没有删除节点?