为什么在C中嵌入Python时无法导入'math'库?

2 投票
1 回答
1788 浏览
提问于 2025-04-15 14:33

我正在使用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的静态库时,导入需要动态库的模块时会出现一些常见的问题。

撰写回答