Nic*_*ick 19 c++ python import function
我现在正在试验python函数.我找到了一种方法将python函数导入c/c ++代码,但不是相反.
我有一个c ++程序,它有一定的功能.我想将已编译的c ++程序"导入"我的python脚本并调用c ++函数.
为简单起见,假设c ++函数非常简单:
int square(x)
{
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
并且编译的程序名为Cprog.
我想我的python脚本是这样的:
import Cprog
print Cprog.square(4)
Run Code Online (Sandbox Code Playgroud)
这可能吗?我在互联网上搜索无济于事,我希望你们中的一位大师可能会有一个聪明的方式来解决这个问题......
dol*_*lby 26
这是上面简单示例的一个小工作完成.虽然线程已经老了,但我认为为初学者提供一个简单的全面指南是有帮助的,因为我以前也遇到过一些问题.
function.cpp内容(使用extern"C"以便ctypes模块可以处理该函数):
extern "C" int square(int x)
{
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
然后编译function.cpp文件(例如使用mingw):
g++ -shared -c -fPIC function.cpp -o function.o
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令创建共享对象库(注意:并非所有地方都是空白):
g++ -shared -Wl,-soname,library.so -o library.so function.o
Run Code Online (Sandbox Code Playgroud)
然后运行wrapper.py一个程序应该工作.
如果您将程序构建为共享库/ DLL,则可以使用ctypes来调用它.
import ctypes
print ctypes.windll.cprog.square(4) # windows
print ctypes.CDLL('cprog.so').square(4) # linux
Run Code Online (Sandbox Code Playgroud)