在Python程序中导入C++函数
我现在正在尝试使用Python函数。我找到了一种方法可以把Python函数导入到C/C++代码中,但反过来就没找到。
我写了一个C++程序,里面有一个特定的函数。我想把这个编译好的C++程序“导入”到我的Python脚本中,并调用这个C++函数。
为了简单起见,假设这个C++函数非常简单:
int square(x)
{
return x*x;
}
而这个编译好的程序叫做Cprog。
我希望我的Python脚本看起来像这样:
import Cprog
print Cprog.square(4)
这可能吗?我在网上搜索过,但没有找到解决办法,希望你们这些高手能给我一些聪明的建议...
5 个回答
11
如果你把你的程序做成一个共享库或者DLL文件,你可以用ctypes来调用它。
import ctypes
print ctypes.windll.cprog.square(4) # windows
print ctypes.CDLL('cprog.so').square(4) # linux
30
这里有一个简单示例的完整代码,虽然这个讨论已经有点时间了,但我觉得为初学者提供一个简单明了的指南还是很有帮助的,因为我之前也遇到过一些问题。
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,程序应该就能正常工作了。