2013-08-06 43 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库之外不可访问。

相关问题