使用Python.h的未定义符号

时间:2011-07-05 05:29:28

标签: c++ python python-2.7

我正在尝试将Python脚本嵌入到C ++应用程序中。在我做这样的事情之前,我正在尝试运行示例脚本。

这是我的代码:

#include <Python/Python.h>
int main(int argc, char *argv[]) {
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
                   "print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}

使用g ++编译给我:

Undefined symbols:
  "_Py_Initialize", referenced from:
      _main in cc2Ogphq.o
  "_PyRun_SimpleStringFlags", referenced from:
      _main in cc2Ogphq.o
  "_Py_Finalize", referenced from:
      _main in cc2Ogphq.o
ld: symbol(s) not found

我正在运行Mac OSX Snow Leopard并且我正在运行Python 2.7.2。

3 个答案:

答案 0 :(得分:4)

您需要链接到python库,例如libpython.a用于静态链接。

答案 1 :(得分:1)

这个答案很古老而且令人讨厌(静电,eww)。

distutils是大多数情况下的答案。

如果您真的坚持DIY,请将其添加到〜/ .profile:

# Works on Lion

alias pygcc='gcc -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/ /usr/lib/python2.7/config/libpython2.7.dylib'

alias pyg++='gcc -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/ /usr/lib/python2.7/config/libpython2.7.dylib'

使用方法:    pyg ++ yourfile.cc

pygcc someotherfile.c

答案 2 :(得分:0)

当然,我的答案很晚,    但我有一个相同的问题,我需要   做一些搜索  我使用ubuntu 11,bash shell  解决的是:

g ++ c_pyth.cpp -o c_pyth -I /usr/include/python2.7/ /usr/lib/python2.7/config/libpython2.7.so

如果你不包含/usr/include/python2.7/,编译器将看不到“Python.h”

如果你不包含/usr/lib/python2.7/config/libpython2.7.so,编译器将无法生成静态可执行文件