c++ - 为什么在c中嵌入python时无法导入 'math'库?

标签 c++ python c

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

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

函数好像已经定义好了,为什么共享对象找不到函数呢?

最佳答案

我使用的是 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 的静态库然后导入需要动态库的模块时似乎存在一些常见问题。

关于c++ - 为什么在c中嵌入python时无法导入 'math'库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1469370/

相关文章:

c++ - 如何在文本模式下安全地混合 std::ifstream 的 tellg、seekg 和 read(*,n) 方法

python - 如何将管道分隔的字符串读入数据帧?

python - 在Python中将字符串转换为numpy数组,反之亦然

c - 合并排序停止运行

c++ - 如何为 C/C++ 传递可选命令行参数?

c++ - "placement new"有什么用?

python - “NoneType”对象在 24 小时自学 Python 的第 9 章中没有属性 '__getitem__'

c - --start-group 和 --end-group 链接器标志对动态库的意义

c - GPU程序编译依赖OpenCV如何解决?

c++ - 在导致意外行为的对话框中两次添加相同的 ActiveX 控件