Python.h中的未定义符号
我正在尝试把一个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
,这是为了进行静态链接。