Python:ctypes CDLL('图书馆.so')找不到指定的模块

2024-10-02 14:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python 3中使用一个简单的C++函数。 在一个教程之后,我构建了一个共享库(“.so”),并尝试用ctypes.CDLL()功能。在

编译.cpp和执行.py在命令行上进行得很好,但是当我将所有文件复制到IDE(在我的例子中是PyCharm)并从那里运行代码时,我得到了一个错误:

Traceback (most recent call last):
  File ".../test/wrapper.py", line 26, in <module>
    test = ctypes.CDLL('library.so').foo_bar_function(a, b)
  File "...\AppData\Local\Programs\Python\Python36\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module was not found

我已经尝试指定图书馆.so,没有运气。在

我知道有一些工具集Boost.Python可以帮助用c/c++函数扩展python的库。但是由于函数不需要任何特殊的东西,只是“静态”方法,而且非常简单,所以我想我不必经历这些麻烦。我的函数所要做的就是从python获取一些数组,用简单的操作操作数组并返回一个int

我所做的:

  • 创建了两个文件:

    …/测试/函数.cpp …/测试/包装器.py

在函数.cpp公司名称:

^{pr2}$

以及包装器.py在

import ctypes

py_a = [10,5,6,2,1,1,1,6,3,1]
c_a = (ctypes.c_float * len(py_a))(*py_a)

py_b = [1,1,2]
c_b = (ctypes.c_int * len(py_b))(*py_b)

test = ctypes.CDLL('library.so').foo_bar_function(c_a, c_b)

print(test)

然后我跑了:

...\test> g++ -shared -c -fPIC function.cpp -o function.o
...\test> g++ -shared -Wl,-soname,library.so -o library.so function.o
...\test> python wrapper.py
0 (expected output from c++ function)

所以在命令内一切如期进行。在

我还能试试什么?在


Tags: 文件函数inpytestsolinelibrary