在C++应用中嵌入Python导入ctype

1 投票
1 回答
1127 浏览
提问于 2025-04-15 23:26

我正在尝试在一个基于C++的编程语言中嵌入Python(CCL:计算控制语言,可能你们都没听说过)。所以,我并没有一个“主”函数来进行调用。

我写了一个测试的.cc程序,里面有一个主函数,当我编译并运行它时,我可以导入我自己的Python模块和系统模块来使用。

但是,当我把我的代码嵌入到基于CCL的程序中并用g++编译时,虽然大部分功能都能正常使用,但我遇到了一个运行时错误: ImportError: /usr/lib/python2.6/lib-dynload/_ctypes.so: undefined symbol: PyType_GenericNew

这是在运行时错误发生时执行的代码。

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

logical.py导入了一些模块,其中一个模块尝试执行'from ctypes import *',这就引发了运行时错误。

有人能给我解释一下这个问题吗?我该如何解决它?看起来我在编译C++部分时,链接对象是正确的。

谢谢。

1 个回答

1

Python的运行环境其实就是一堆库,这些库是你的程序在运行时用到的。它们会把字符串转换成Python的字节码,然后再解释这些字节码。你遇到的错误是因为在解释程序的时候,Python的运行环境需要调用一个函数(PyType_GenericNew),但是在你系统上编译好的Python运行环境里找不到这个函数。根据这个函数的名字来看,这个问题是不能忽视或者绕过的,因为它是运行环境的一个基本部分。

假设你的PATH设置是正确的,解决这个问题的最好办法就是重新安装或者重建Python。你的安装缺少了一些重要的东西。

撰写回答