我正在尝试使用python函数。我找到了一种方法将python函数导入到c / c ++代码中,但不是相反。
我写了一个c ++程序,它有一定的功能。我想将已编译的c ++程序“导入”我的python脚本并调用c ++函数。
为简单起见,请说c ++函数就像:
一样简单int square(x)
{
return x*x;
}
,编译的程序名为Cprog。
我希望我的python脚本类似于:
import Cprog
print Cprog.square(4)
这可能吗?我在互联网上搜索无济于事,我希望你们中的一位大师可能会有一个聪明的方式来解决这个问题......
答案 0 :(得分:24)
以上是一个简单的例子。虽然线程很老,但我觉得为初学者提供一个简单的全面指南是有帮助的,因为我之前也遇到过一些问题。
function.cpp内容(extern" C"用于使ctypes模块可以处理该函数):
extern "C" int square(int x)
{
return x*x;
}
wrapper.py内容:
import ctypes
print(ctypes.windll.library.square(4)) # windows
print(ctypes.CDLL('./library.so').square(4)) # linux or when mingw used on windows
然后编译function.cpp文件(例如使用mingw):
g++ -shared -c -fPIC function.cpp -o function.o
然后使用以下命令创建共享对象库(注意:并非所有地方都是空白):
g++ -shared -Wl,-soname,library.so -o library.so function.o
然后运行wrapper.py,该程序应该可以工作。
答案 1 :(得分:9)
如果您将程序构建为共享库/ DLL,则可以使用ctypes来调用它。
import ctypes
print ctypes.windll.cprog.square(4) # windows
print ctypes.CDLL('cprog.so').square(4) # linux
答案 2 :(得分:3)
您希望使用C / C ++模块扩展 python。以下Python文档是开始阅读的好地方:http://docs.python.org/extending/extending.html
答案 3 :(得分:3)
你需要在其中创建一个包含该函数的python模块。主要有三种方式:
答案 4 :(得分:0)