由于未定义的符号'start_time',MEX 文件无效
Invalid MEX-file due to undefined symbol 'start_time'
我正在尝试运行从这里下载的复杂冰盖建模软件:ISSM
运行自动制作配置并正确编译后,出现以下错误。
无效的 MEX 文件 '/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/TriMesh.mexa64': /home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMModules.so.0: undefined symbol: start_time
三角形中的错误(第 40 行) [elements,x,y,segments,segmentmarkers]=TriMesh(域名,裂缝名称,面积);
运行错误(第 11 行) md=triangle(model,'./DomainOutline.exp',1000);
这是来自runme.m
中的以下代码片段:
disp(' Step 1: Mesh creation');
%Generate initial uniform mesh (resolution = 20000 m)
md=triangle(model,'./DomainOutline.exp',1000);
我在这里的想法是,它所链接的triangle.a
库是一个静态文件,因此它应该是一个共享对象。但是,即使在将三角形库更新为triangle.so
后,我仍然收到相同的错误。在这一点上,我完全没有想法。如果我缺少任何相关信息,请告诉我,我对GNU自动化工具还比较陌生。
我尝试使用以下输出运行以下命令:
$ nm ./lib/libISSMModules.so.0 | grep 'start_time'
U start_time
运行 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) undefined symbol: interface (./lib/libISSMModules.so.0) 未定义的符号:read_params (./lib/libISSMModules.so.0) 未定义的符号:smalloc_stats (./lib/libISSMModules.so.0)
未定义的符号以 U
或 B
为前缀。
我的理解是,U
意味着符号未定义,B
表示符号位于未初始化的部分。但是,我不确定如何解决此问题。
我无法下载和尝试您的代码,但您描述的症状(符号是在库中定义的,您正在链接到库,但仍然找不到符号)看起来非常像库链接顺序的问题。
这里有很好的文章来解释链接顺序的问题。 简而言之,如果符号是在库 (libA) 中定义的,该库在需要该符号的文件或库 (libB) 之前链接,则该符号将被报告为缺失。
因此,顺序libA libB
(其中libB
取决于libA
)将触发错误,但libB libA
是可以的。 如果两个库都有相互依赖关系,则使用 libA libB libA
或使用 --start-group
和 --end-group
链接器标志,其中链接器将遍历文件组,直到找到所有未解析的符号。
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用 MEX 编译C++文件
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 解析某些行的文本和输出"time of appearance"
- 当我运行MEX文件时,MATLAB崩溃
- ASIOSDK;从hostsample.cpp生成mex文件时出错
- 返回time()库函数的数据类型
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- 为什么这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?
- 如何从 boost::p osix_time::p time 获取秒数
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- C++ SRAND(time(0)) 在猜谜游戏中不起作用
- 即使包含 <time.h 后仍"‘CLOCK_PER_SEC’ was not declared in this scope"错误>
- struct TM time;vs TM time = {}.输出相同但不相同?
- 索引和访问 mex 函数中单元数组和矩阵的元素
- 使用 Windows 寄存器查找下一个"Daylight Saving Time"
- c++ get millsecond time
- "Feature X requires run-time support"的含义是什么?
- 如何传递以 "size determined at run time" 作为引用的动态分配数组?
- constexpr - "Evaluate value at compile time"到底是什么意思?