2012-05-17 3 views
0

저는 python으로 프로그램을 작성하고 있습니다. 이제는 ctypes를 사용하여 C++ 클래스의 일부 함수를 사용하려고합니다. 기본적으로 파이썬에서 데이터 배열을 가지고 있습니다. 그 배열을 사용하여 이미지 클래스로 변환해야하는 C++의 다른 프로그램이 있습니다. 여기에 C++있는 프로그램입니다. 나는 이미 리눅스에서 makefile을 만들었고 컴파일한다.ctypes를 사용하여 linux에서 C++과 python을 연결하십시오.

파일의 이름은 나는 또한 .so를 만들었습니다 '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 

하고 .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++과 파이썬을 연결하는 시도 얻을 메시지이며 그것을 잘 작동합니다. 그것은 다른 클래스에서 객체를 정의하려고 할 때 문제가되는 것 같습니다. 그래서 어느 누구도 문제를 해결하는 방법을 알고 있습니까? 감사합니다.

답변

1

빌드 된 .so 파일은 MImage 내용이 포함 된 다른 공유 가능한 라이브러리에 의존합니다. 나는 파이썬 ctypes이 자동으로 의존 라이브러리를로드 할 것이라고 생각하지 않는다. 당신 자신을 끌어 와야한다. 그리고 RTLD_GLOBAL 플래그를 지정하여 해당 MImage 라이브러리의 심볼을로드 할 때 pclink.so에 사용할 수 있도록해야합니다.