2012-05-17 60 views
0

我正在寫一個程序在python中。現在我想用ctypes來使用C++中的類的一些功能。 所以基本上,我有一個Python中的數據數組。我有另一個程序在c + +應該使用該數組並將其轉換爲圖像類。這裏是我在C++中的程序。我已經在linux中編譯makefile並編譯。使用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 

我也做了。所以和.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和它工作正常。似乎問題是當我嘗試從另一個類定義一個對象時。所以任何人都知道如何解決這個問題? 謝謝

回答

1

看起來像你的內置.so文件取決於另一個共享庫包含MImage的東西。我不認爲Python ctypes會自動加載依賴庫,你必須自己加載它們。您需要指定RTLD_GLOBAL標誌,以便在加載該標誌時,該MImage庫中的符號可用於pclink.so。