为什么在C中嵌入Python时无法导入'math'库?
我正在使用Python 2.6文档中的一个例子,想要尝试把一些Python代码嵌入到C语言中。这个C代码示例让我无法执行以下这一行脚本:
import math
使用这一行:
./tmp.exe tmp foo bar
它报错了
Traceback (most recent call last):
File "/home/rbroger1/scripts/tmp.py", line 1, in <module>
import math
ImportError: [...]/python/2.6.2/lib/python2.6/lib-dynload/math.so: undefined symbol: PyInt_FromLong
当我对生成的二进制文件(tmp.exe)使用nm
命令时,它显示:
0000000000420d30 T PyInt_FromLong
这个函数似乎是定义过的,那为什么共享对象找不到这个函数呢?
1 个回答
2
我在用Python 2.6,成功编译并运行了你提到的那个示例代码,完全没有改动源代码。
$ gcc python.c -I/usr/include/python2.6/ /usr/lib/libpython2.6.so $ ./a.out random randint 1 100 Result of call: 39 $ ./a.out random randint 1 100 Result of call: 57
我特别选择了random
模块,因为它确实有from math import log,...
这行代码,所以它肯定也在导入math
模块。
你的问题可能是因为你链接的方式不对;可以看看这个论坛帖子,里面有别人遇到的类似问题。我找不到那些链接了,但似乎在尝试链接Python的静态库时,导入需要动态库的模块时会出现一些常见的问题。