使用ctypes链接c++;linux中的Java和python

使用ctypes链接c++;linux中的Java和python,python,ctypes,python-c-extension,Python,Ctypes,Python C Extension,我正在用python编写一个程序。现在我想使用cType使用C++中的一个类的一些函数。 基本上,我有一个python数据数组。我有另一个C++程序,它应该使用这个数组并将它转换成图像类。这是我在C++中的程序。我已经在linux中创建了makefile,它可以编译 文件名为“pclink.cpp” #include <stdio.h> #include "MImage.h" #include<stdlib.h> #ifdef __cplusplus extern

我正在用python编写一个程序。现在我想使用cType使用C++中的一个类的一些函数。 基本上,我有一个python数据数组。我有另一个C++程序,它应该使用这个数组并将它转换成图像类。这是我在C++中的程序。我已经在linux中创建了makefile,它可以编译

文件名为“pclink.cpp”

   #include <stdio.h>
#include "MImage.h"
#include<stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif
  int conv(double* data, int x,int y, int z, int len) {
    MImage M;
    //M.MLoadFromArray(data,x,y,z,len);    

    return 0;

  }
#ifdef __cplusplus
}
#endif
这就是我得到的信息

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    pclink=np.ctypeslib.load_library('pclink','.')
  File "/usr/lib/python2.7/dist-packages/numpy/ctypeslib.py", line 131, in load_library
    raise exc
OSError: /home/lucy94/pclink.so: undefined symbol: _ZN6MImage14MLoadFromArrayEPdiiii
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
pclink=np.ctypeslib.load_库('pclink','。)
文件“/usr/lib/python2.7/dist packages/numpy/ctypeslib.py”,第131行,在load_库中
加薪
OSError:/home/lucy94/pclink.so:未定义的符号:zn6mage14mloadfromarrayepdiii

以前我尝试用一个简单的程序来连接C++和Python,这个程序没有任何类,而且很好。问题似乎是当我试图从另一个类定义一个对象时。有人知道如何解决这个问题吗?


谢谢

看起来像是您构建的。所以文件依赖于另一个包含MImage内容的可共享库。我不认为Python会自动为您加载依赖库,您必须自己拉它们。您需要指定RTLD_全局标志,以便在加载该标志时,该图像库中的符号可供pclink.so使用

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    pclink=np.ctypeslib.load_library('pclink','.')
  File "/usr/lib/python2.7/dist-packages/numpy/ctypeslib.py", line 131, in load_library
    raise exc
OSError: /home/lucy94/pclink.so: undefined symbol: _ZN6MImage14MLoadFromArrayEPdiiii