【发布时间】:2025-12-02 00:05:02
【问题描述】:
我正在尝试运行从这里下载的复杂冰盖建模软件:ISSM
使用 automake 运行配置并正确编译后,我收到以下错误。
无效的 MEX 文件“/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/TriMesh.mexa64”: /home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMModules.so.0:未定义符号:start_time
三角形错误(第 40 行) [元素,x,y,segments,segmentmarkers]=TriMesh(domainname,riftname,area);
runme 中的错误(第 11 行) md=triangle(model,'./DomainOutline.exp',1000);
这是来自runme.m中的以下代码sn-p:
disp(' Step 1: Mesh creation');
%Generate initial uniform mesh (resolution = 20000 m)
md=triangle(model,'./DomainOutline.exp',1000);
我的想法是链接到的triangle.a 库是一个静态文件,因此它应该是一个共享对象。但是,即使将三角形库更新为triangle.so,我仍然收到相同的错误。在这一点上,我完全没有想法。如果我缺少任何相关信息,请告诉我,我对 GNU autotools 还是比较陌生。
我已尝试运行以下命令,输出如下:
$ nm ./lib/libISSMModules.so.0 | grep '开始时间'
U 开始时间
ldd 命令的运行会返回以下未定义的符号:
$ldd -r ./lib/libISSMModules.so.0
未定义符号:_ZN14ToolkitOptions14toolkitoptionsE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) 未定义符号:_ZN8IssmComm4commE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) 未定义符号:_ZN8IssmComm8parallelE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) 未定义符号:_Z9ApiPrintfPKc (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) 未定义符号:start_time (./lib/libISSMModules.so.0) 未定义符号:input_time (./lib/libISSMModules.so.0) 未定义符号:Using_Main (./lib/libISSMModules.so.0) 未定义符号:接口 (./lib/libISSMModules.so.0) 未定义符号:read_params (./lib/libISSMModules.so.0) 未定义符号:smalloc_stats (./lib/libISSMModules.so.0)
未定义的符号以U 或B 为前缀。
据我了解,U 表示符号未定义,B 表示符号位于未初始化的部分中。但是,我不确定如何解决此问题。
【问题讨论】:
-
可能您的 DYNAMIC_LIBRARY_PATH 变量设置不正确。
-
@AnonSubmitter85 将在哪里进行修改?环境、配置还是makefile?
-
环境,如果使用 BASH,通常类似于
export DYNAMIC_LIBRARY_PATH=/path/to/shared/objects1:/path/to/blahblah/。但是,我认为您需要在启动 matlab 之前进行设置。另外,如果已经定义,请务必使用export DYNAMIC_LIBRARY_PATH=/path1:/path2:$DYNAMIC_LIBRARY_PATH。 -
@AnonSubmitter85 我将
libISSMModules.so.0和triangle.a的路径添加到DYNAMIC_LIBRARY_PATH,但我仍然遇到同样的错误。设置此变量后是否需要重新配置/重新编译? -
无需重新编译;它在程序启动时加载库。
*.a库是静态的,需要提供给链接器。确保在设置库路径后重新启动 matlab 并从同一终端执行此操作。
标签: c++ matlab symbols static-linking automake