C ++使用Python.h编译未定义的符号

时间:2012-10-29 04:48:39

标签: c++ python gcc python-2.7

所以,我一直在尝试开始使用Python.h进行一个我想要处理的小项目,看起来非常简单/。但在开始之前,我想尝试学习如何使用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

现在是什么?

1 个答案:

答案 0 :(得分:3)

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

cc test.cpp -framework Python

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

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

更新:使用您在评论(Xcode 3.2.6gcc-4.2)中报告的配置,您似乎需要明确调用c++的{​​{1}}变体。之一:

gcc

g++ test.cpp -framework Python

应该有用。