为什么我不能在c中嵌入python时导入'math'库?

时间:2009-09-24 01:20:34

标签: c++ python c

我正在使用python的2.6文档中的示例开始尝试在C中嵌入一些python。example C-code不允许我执行以下1行脚本:

import math

使用line:

./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 个答案:

答案 0 :(得分: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模块。

您的问题可能是由于您的链接方式;有关其他人的类似问题,请参阅this forum post。我再也找不到链接了,但是当尝试链接Python的静态库然后导入需要动态库的模块时,似乎存在一些常见问题。