1

因此,我一直在尝试将 Python.h 用于我想从事的一个看起来很 /simple/ 的小项目。但在开始之前,我想尝试学习如何使用 Python.h。所以我在网上找到了这个小例子。

#include "Python/Python.h"  

int main(int argc, char** argv)  
{  
    Py_Initialize();  
    PyRun_SimpleString("print 'Test'");  
    PyRun_SimpleString("print str(3 + 5)"); 
    Py_Exit(0);  
}

看起来很简单。当我第一次使用

gcc test.cpp

编译,我得到了一些未定义的符号。我很快发现我应该使用

-lpython2.7

然后我发现我也可以使用

-L/Library/Frameworks/Python.framework/Versions/2.7/lib/

那没有用(我确保 /Library/Frameworks/Python/Versions/2.7/lib/ 存在)我被卡住了,我该怎么办?我明白了

Undefined symbols:
  "_Py_Initialize", referenced from:
      _main in ccoUOSlc.o
  "_PyRun_SimpleStringFlags", referenced from:
      _main in ccoUOSlc.o
      _main in ccoUOSlc.o
  "___gxx_personality_v0", referenced from:
      _main in ccoUOSlc.o
      CIE in ccoUOSlc.o
  "_Py_Exit", referenced from:
      _main in ccoUOSlc.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

编辑:我刚刚尝试使用 -Framework 参数,并尝试在 -L 之后添加 -l python2.7 参数,现在我得到了

Undefined symbols:
  "___gxx_personality_v0", referenced from:
      _main in ccfvtJ4j.o
      CIE in ccfvtJ4j.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

怎么办?

4

1 回答 1

4

如果您在 OS X 上使用 Python 框架安装,因为它看起来是基于路径的,您可以使用-frameworkApple 编译器驱动程序的参数:

cc test.cpp -framework Python

或者,您可以显式指定目录路径和库名称:

cc test.cpp -L /Library/Frameworks/Python.framework/Versions/2.7/lib/ -l python2.7

更新:使用您在评论 ( Xcode 3.2.6, gcc-4.2) 中报告的配置,您似乎需要显式c++调用gcc. 任何一个:

g++ test.cpp -framework Python

或者

c++ test.cpp -framework Python

应该管用。

于 2012-10-29T05:49:54.973 回答