在python中使用链接库中的方法时出现属性错误

2024-05-29 06:00:15 发布

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

我试图在Python代码中使用一些C++方法,我使用的是^ {CD1>}库。我用一个简单的^ {< CD2}}编写了一个简单的C++代码,没有参数,还有一个简单的方法,叫做^ {CD3}},它的类型是^ {< CD4}}。我还编写了一个简单的python代码来导入这两个方法。我使用以下命令创建了两个链接库(一个.so和一个.a,因为我使用的是Debian):

g++ -o hello.so -shared -fPIC hello.cpp 

然后使用export LD_LIBRARY_PATH=/the/path/to/the/linked/libraries/directory。在

获取main方法没有问题,但是当我试图得到printArgs时,我得到了AttributeError。下面是C++代码:

^{pr2}$

下面是Python代码:

from ctypes import *
helloInCPP_lib = cdll.LoadLibrary("hello.a")
print helloInCPP_lib
helloInCPPMain = helloInCPP_lib.main
print helloInCPPMain
helloInCPPPrint = helloInCPP_lib.printArgs
print helloInCPPPrint

我得到这个输出:

<CDLL 'hello.a', handle 9c45488 at b73d1e6c>
<_FuncPtr object at 0xb73e67e4>
Traceback (most recent call last):
    File "testHelloInCPP.py", line 9, in <module>
        helloInCPPPrint = helloInCPP_lib.printArgs(None)
    File "/usr/lib/python2.6/ctypes/__init__.py", line 366, in __getattr__
        func = self.__getitem__(name)
    File "/usr/lib/python2.6/ctypes/__init__.py", line 371, in __getitem__
        func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /etc/linked_libraries/hello.a: undefined symbol: printArgs

我还尝试了cdll.LoadLibrary("hello.so")和/或{};在两种情况下都得到了相同的错误。有什么想法吗?在

我在VMWare工作站和Python2.6上使用了32位的Debian。在


Tags: 方法代码inpyselfhellosolib
1条回答
网友
1楼 · 发布于 2024-05-29 06:00:15

使用^{}声明{}:

#include <iostream>
using namespace std;

extern "C" {
    int printArgs(char * args_array);
}

int printArgs(char * args_array){
    for (int i = 0; i < 5; i++){
        cout<<i<<"- "<<args_array[i]<<"\n";
    }
}

int main(){
    cout<<"Hello\n";
}

顺便说一句,您应该传递一个字符串(c_char_p),而不是None

^{pr2}$

关于argtypes,见Specifying the required argument types (function prototypes)。在

相关问题 更多 >

    热门问题