我很清楚允许C代码运行python代码的许多可能性,反之亦然(Cython,Boost.Python,...)。但是,除非我弄错了,所有这些方法只是“调用”相关的python脚本并管理C程序和python脚本之间的交互。因此,需要安装python。
在我的情况下,我想要一个独立的解决方案,我的python代码可以以某种方式编译并链接到我的主要C ++程序。我对Cython抱有希望,因为它允许我编译我的脚本并创建一个.so文件。但是,我似乎无法将.so文件“链接”到我的C ++程序中。我尝试了以下方法:
一个简单的python脚本,包含一个函数multiply(a,b),它返回一个* b;我使用cython创建了一个libmultiply.so文件。 一个简短的Cpp文件,它输出乘法(5,2)的结果:
int multiply(int, int);
int main()
{
std::cout << multiply(5,2) << std::endl;
}
我通过以下方式构建: g ++ test.cpp -L / home / jerome / -lmultiply
这给了我错误:
test.cpp:(.text+0x2b): undefined reference to `multiply(int, int)'
collect2: error: ld returned 1 exit status
我不确定我的尝试是否有意义,但希望它能让你了解我想要实现的目标。
答案 0 :(得分:2)
Shed Skin是我能找到的最接近的东西。它将Python的类型化子集编译为c ++。可能不像你想的那么强大,但这是一个奇怪的用例。如果您想自己编写一些内容,可以查看已用于创建类似于您想要的内容的LLVM。
编辑1:
我刚刚在github Awesome-python上找到了这个令人敬畏的python内容列表,它链接到Pyston这是一个python LLVM实现。可能更适合您想要的或者是Python到C ++桥接的起点。