2013-08-06 88 views
3

我正在嘗試構建MEX模塊,但是我遇到了未定義符號的運行時問題。這裏是輸出由於未定義符號導致的MEX文件無效

Invalid MEX-file '/home/glperez/issm/trunk-jpl/lib/TriMesh.mexa64': 
/home/glperez/issm/trunk-jpl/lib/libISSMCore.so: undefined symbol: _ZN14ToolkitOptions14toolkitoptionsE 

Error in triangle (line 40) 
[elements,x,y,segments,segmentmarkers]=TriMesh(domainname,riftname,area); 

Error in test101 (line 1) 
md=triangle(model(),'../Exp/Square.exp',50000.); 

檢查在 'libISSMCore.so' 符號印證了未定義的符號

$ nm ./lib/libISSMCore.so | grep 'toolkit' 
U _ZN14ToolkitOptions14toolkitoptionsE 

然而,符號出現在 'TriMesh.mexa64':

$ nm ./lib/TriMesh.mexa64 | grep 'toolkit' 
00000000002391b8 b _ZN14ToolkitOptions14toolkitoptionsE 

據我瞭解,小寫字母'b'表示該符號位於未初始化的部分,並且它是本地對全局。

這裏的問題與符號是本地的,未初始化的還是別的什麼有關?

+0

當您構建'TriMesh'時,您是否嘗試鏈接'libISSMCore.so'?如果你顯示編譯步驟,這將有所幫助。 – Amro

回答

1

據我所知,小寫「B」表示該符號是未初始化的部分,並且它是本地

的符號是本地的,並且是在零初始化(又名BSS ) 部分。

是的,問題是它是本地的,即在TriMesh.mexa64庫之外不可訪問。

相關問題