相关疑难解决方法(0)

编译python代码并将其链接到C++程序?

我很清楚允许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)

我不确定我尝试的是否有意义,但希望它能让你了解我想要实现的目标.

c++ python

5
推荐指数
1
解决办法
882
查看次数

C&amp;Python混合编程时如何解决“分段错误”?

在我的 Ubuntu 下:

$猫测试.py

#Filename test.py 
def Hello(): 
    print "Hello, world!" 
Run Code Online (Sandbox Code Playgroud)

$猫tom.cpp

#include <Python.h> 

int main() 
{ 
     Py_Initialize(); 

     PyObject * pModule = NULL; 
     PyObject * pFunc   = NULL; 

     pModule = PyImport_ImportModule("test");
     pFunc   = PyObject_GetAttrString(pModule, "Hello"); 
     PyEval_CallObject(pFunc, NULL); 

     Py_Finalize(); 

     return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

然后编译它:

g++ tom.cpp -I/usr/include/python2.7 -L/usr/lib/python2.7 -lpython2.7
Run Code Online (Sandbox Code Playgroud)

运行:$ ./a.out

Segmentation fault
Run Code Online (Sandbox Code Playgroud)

为什么?有人可以帮忙吗?谢谢!

BR,汤姆

c python

4
推荐指数
2
解决办法
4635
查看次数

标签 统计

python ×2

c ×1

c++ ×1