【问题标题】:Importing ctype; embedding python in C++ application导入 ctype;在 C++ 应用程序中嵌入 python
【发布时间】:2010-06-02 02:13:42
【问题描述】:

我正在尝试将 python 嵌入基于 C++ 的编程语言(CCL:计算控制语言,你们中没有人听说过)。因此,我并没有真正的“主”函数来进行调用。

我已经做了一个带有main的.cc测试程序,当我编译并运行它时,我可以导入我自己的python模块和系统模块来使用。

当我将我的代码嵌入到基于 CCL 的程序中并编译它(使用 g++)时,我似乎拥有了大部分功能,但我得到了一个 RUNTIME 错误: ImportError:/usr/lib/python2.6/lib-dynload/_ctypes.so:未定义符号:PyType_GenericNew

这是在运行时出错时执行的代码。

void FFSim::initCKBot (){   
    Py_Initialize(); 
    PyRun_SimpleString("execfile('logical.py')");
}

logical.py 导入模块,其中一个尝试执行“from cytpes import *”,这会引发运行时错误。

有人可以向我解释一下这个问题以及如何解决它吗?在编译代码的 c++ 方面时,似乎我已经正确链接了对象。

谢谢。

【问题讨论】:

  • 您能否提供显示此错误的最少源代码(编辑您的帖子)?您是否能够使用纯 C++ 或仅使用 CCL 产生错误(编辑:没关系,我需要更彻底地阅读)? ctypes 是唯一给您带来麻烦的东西,还是其他模块?
  • 其实是RUNTIME错误。 CCL 没有编译,就像 Python 一样。我用 CCL 调用的 c++ 函数给出了错误: void FFSim::initCKBot (){ Py_Initialize(); PyRun_SimpleString("execfile('logical.py')");错误发生在 execfile('logical.py') 中,它导入了一个模块 'can'。 'can.py' 成功导入 'struct' 和 'cmd' 然后尝试执行 'from ctypes import *' 行,程序失败,打印运行时错误,在 execfile('logical.py ')。

标签: c++ python import ctypes embedding


【解决方案1】:

Python 运行时实际上是您的程序使用的库的集合。这些库接受字符串,将它们转换为 Python 字节码,然后解释字节码。您遇到的错误是,作为解释程序的一部分,Python 运行时需要调用一个函数 (PyType_GenericNew),但该函数在您系统上已编译的 Python 运行时中不存在。离开函数的名称,这不是您可以忽略或解决的问题。它是运行时的基本部分。

假设您的PATH 是正确的,您最好的解决方案是重新安装或重建 Python。您的安装缺少一些重要的东西。

【讨论】:

  • 我正在与合作伙伴合作,我们的两台计算机上都有这个错误;我不确定这是 Python 构建问题。当我在 c++ 程序的 main 函数中编译相同的代码时,我没有收到错误,并且通过 logical.py 加载的所有模块都按预期运行。不过,我会尝试重建并验证 PATH。感谢您澄清错误是什么。
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多