0

Pythonでプログラムを書いています。今、私は ctypes を使用して、c++ にあるクラスのいくつかの関数を使用したいと考えています。基本的に、私はPythonでデータの配列を持っています。その配列を使用して画像クラスに変換することになっているC ++の別のプログラムがあります。これが私がc ++で持っているプログラムです。私はすでにLinuxでメイクファイルを作成しており、コンパイルします。

ファイルの名前は「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

また、.so ファイルと .o ファイルを作成しましたが、すべて問題ないようです。しかし、Pythonで私が入力するとき

  import numpy as np
import ctypes
import os

pclink = np.ctypeslib.load_library('pclink','.')

これは私が受け取るメッセージです

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

以前、クラスを持たない単純なプログラムで c++ と python をリンクしようとしましたが、正常に動作しました。別のクラスからオブジェクトを定義しようとすると問題が発生するようです。誰でも問題を解決する方法を知っていますか?ありがとう

4

1 に答える 1

1

ビルドされた .so ファイルは、MImage を含む別の共有可能なライブラリに依存しているようです。Python ctypesが依存ライブラリを自動的にロードするとは思わないので、自分でプルする必要があります。また、RTLD_GLOBAL フラグを指定して、ロード時に MImage ライブラリのシンボルを pclink.so で使用できるようにする必要があります。

于 2012-05-18T01:54:10.347 に答える