gpt4 book ai didi

python - 如何在使用 的 Python 中调用 C++ 代码

转载 作者:行者123 更新时间:2023-12-05 04:35:05 24 4
gpt4 key购买 nike

我正在尝试在 Python 中调用我的一些 C++ 机器学习代码。我尝试了多种其他方法,例如 this questionthis explanation ,两者非常相似。我完全按照这些,使用相同的文件名和代码。

例如,我有以下 C++ 代码...

文件.cpp

#include <iostream>

void some_code()
{
std::cout << "Hello world!";
}

extern "C"
{
void hello_there() { some_code(); }
}

然后我用...编译它

g++ -c -fPIC file.cpp -o foo.o

g++ -shared -Wl,-soname,lib.so -o lib.so foo.o

代码.py

from ctypes import cdll

lib = cdll.LoadLibrary('./lib.so')

lib.hello_there()
Traceback (most recent call last):
File "c:\some-path-here\1 - calling-cpp-with-python.py", line 5, in <module>
lib = cdll.LoadLibrary('./lib.so')
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\ctypes\__init__.py", line 452, in LoadLibrary
return self._dlltype(name)
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python310\lib\ctypes\__init__.py", line 374, in __init__
self._handle = _dlopen(self._name, mode)
FileNotFoundError: Could not find module 'C:\some-path-here\lib.so' (or one of its dependencies). Try using the full path with constructor syntax.

我做错了什么?我还尝试将其编译为 DLL 文件,并在 extern 位的 “void” 之前添加 __declspec(dllexport)

附加说明

如果有帮助...

  • 我使用的是 Windows 10
  • 我正在使用 MinGW G++
  • 文件所在目录名称中有空格。
  • 这是在Python 3.10上运行的,但是在3.9中也会出现这个错误

最佳答案

看起来像是基于错误的路径问题。我能够快速试用您的示例,它对我有用。此错误可能与 iostream 无关,但您可以通过快速更改函数以使用 printf 来确认这一点。

我没有在 Windows 10 中使用 C++ 的经验,但是在使用类似下面的代码访问之前,您能否检查一下您是否能够在 Python 中找到库文件

import os    
print(os.path.exists('./lib.so'))

关于python - 如何在使用 <iostream> 的 Python 中调用 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71115249/

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