Python.h中的未定义符号

1 投票
3 回答
1789 浏览
提问于 2025-04-16 20:50

我正在尝试把一个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

当然,我的回答来得有点晚,但我遇到了同样的问题,所以需要做一些搜索。我使用的是Ubuntu 11和bash命令行。解决方法是:

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,编译器就无法生成静态可执行文件。

1

这个回答有点过时了,不太好(静态的,真让人不舒服)。

distutils 是大多数情况下的解决方案。

如果你真的想自己动手,可以把下面这段加到你的 ~/.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++ 你的文件名.cc

pygcc 另一个文件名.c

4

你需要连接到Python的库,比如说libpython.a,这是为了进行静态链接。

撰写回答