2012-05-17 1 views
0

Я пишу программу в python. теперь я хочу использовать ctypes для использования некоторых функций класса i в C++. так что в принципе у меня есть массив данных в python. У меня есть другая программа в C++, которая должна использовать этот массив и преобразовать его в класс изображения. вот программа, которую я имею в C++. Я уже сделал makefile в Linux, и он компилируется.используя ctypes для связи C++ и python в 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 файлы каждая вещь кажется отлично. но когда в питоне я типа

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 с простой программой, которая не имеет каких-либо классов, и это работает отлично. кажется, проблема в том, что я пытаюсь определить объект из другого класса. так что любой знает, как исправить проблему? спасибо

ответ

1

Похоже, что ваш встроенный файл .so зависит от другой доступной библиотеки, содержащей материал MImage. Я не думаю, что Python ctypes будет автоматически загружать зависимые библиотеки для вас, вы должны сами их вытащить. И вам нужно указать флаг RTLD_GLOBAL, чтобы символы из этой библиотеки MImage были доступны для pclink.so при загрузке.

Смежные вопросы