gpt4 book ai didi

python - 如何使用 python 调用 c++ 函数

转载 作者:行者123 更新时间:2023-11-30 04:42:58 30 4
gpt4 key购买 nike

我想知道是否有办法在 python 代码中使用 c++ 函数

例如,在进行研究后,我确实找到了使用 .dll 文件的解决方案。但是找不到函数我的代码:

fun.cpp:

#include <iostream>
extern int add(int a, int b) {
return a+b;
}
int main()
{
std::cout << "Hello World! from C++" << std::endl;
return 0;
}

使用cmd编译:

g++ fun.cpp -o fun.dll

使用 Python、ctypes 调用函数:

from ctypes import *
import os
mydll = cdll.LoadLibrary("C:/Users/User/Desktop/ctypes/fun.dll")

result= mydll.add(10,1)
print("Addition value:-"+result)

但是我有这个错误:

Traceback (most recent call last): File "c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\ptvsd_launcher.py", line 43, in main(ptvsdArgs) File "c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py", line 432, in main run() File "c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py", line 316, in run_file runpy.run_path(target, run_name='main') File "C:\Python36\lib\runpy.py", line 263, in run_path pkg_name=pkg_name, script_name=fname) File "C:\Python36\lib\runpy.py", line 96, in _run_module_code mod_name, mod_spec, pkg_name, script_name) File "C:\Python36\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "c:\Users\User\Desktop\ctypes\test.py", line 5, in result= mydll.add(10,1) File "C:\Python36\lib\ctypes__init__.py", line 361, in getattr func = self.getitem(name) File "C:\Python36\lib\ctypes__init__.py", line 366, in getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: function 'add' not found

最佳答案

C++ 破坏导出的名称。下面是一个应该在 Windows 和 Linux 上编译的示例。 __declspec(dllexport) 需要在 Windows 上导出函数,但在 Linux 上不需要。 extern "C" 需要使用 C 约定导出函数名称,而不是名称损坏的 C++ 约定。 C++ 中需要名称重整来指示函数参数和返回类型,因为 C++ 可以有多个具有相同名称但采用不同参数的函数。 C 约定不支持同名的多个函数。

fun.cpp:

#ifdef _WIN32
# define API __declspec(dllexport)
#else
# define API
#endif

extern "C" API int add(int a, int b) {
return a+b;
}

python :

from ctypes import *

dll = CDLL('fun')
result = dll.add(10,1)
print('Addition value:',result)

输出:

Addition value: 11

关于python - 如何使用 python 调用 c++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58505664/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com