我很清楚允许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;
}
Run Code Online (Sandbox Code Playgroud)
我通过以下方式构建:g ++ test.cpp -L/home/jerome/-lmultiply
这给了我错误:
test.cpp:(.text+0x2b): undefined reference to `multiply(int, int)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我不确定我尝试的是否有意义,但希望它能让你了解我想要实现的目标.
脱落的皮肤是我能找到的最接近的东西。它将 Python 的类型子集编译为 C++。可能没有您想要的那么强大,但这是一个奇怪的用例。如果您想自己写一些东西,您可以查看LLVM,它已被用来创建与您想要的类似的东西。
编辑1:
我刚刚在 github 上找到了很棒的 python 东西列表Awesome-python,它链接到Pyston,这是一个 python LLVM 实现。可能更适合您想要的东西,或者是 Python 到 C++ 桥梁的起点。