gpt4 book ai didi

c++ - 由于 undefined symbol 'start_time',MEX 文件无效

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:23 29 4
gpt4 key购买 nike

我正在尝试运行从此处下载的复杂冰盖建模软件:ISSM

在使用 automake 运行配置并正确编译后,我收到以下错误。

Invalid MEX-file '/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

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

Error in runme (line 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 autotools 还是比较陌生。

我已经尝试运行以下命令并产生以下输出:

$ nm ./lib/libISSMModules.so.0 | grep 'start_time'

U start_time

ldd 命令的运行返回以下 undefined symbol :

$ldd -r ./lib/libISSMModules.so.0

undefined symbol: _ZN14ToolkitOptions14toolkitoptionsE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) undefined symbol: _ZN8IssmComm4commE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) undefined symbol: _ZN8IssmComm8parallelE (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) undefined symbol: _Z9ApiPrintfPKc (/home/cpmcgrat/Documents/Research/ISSM/issm/trunk/lib/libISSMCore.so.0) undefined symbol: start_time (./lib/libISSMModules.so.0) undefined symbol: input_time (./lib/libISSMModules.so.0) undefined symbol: Using_Main (./lib/libISSMModules.so.0) undefined symbol: interface (./lib/libISSMModules.so.0) undefined symbol: read_params (./lib/libISSMModules.so.0) undefined symbol: smalloc_stats (./lib/libISSMModules.so.0)

undefined symbol 以 UB 为前缀。

据我了解,U 表示该符号未定义,B 表示该符号位于未初始化的部分。不过,我不太确定如何解决这个问题。

最佳答案

我无法下载并尝试您的代码,但您描述的症状(该符号在库中定义,您正在链接到该库,但仍未找到该符号)看起来非常比如库的链接顺序问题。

有好文章herehere解释链接顺序的问题。简而言之,如果符号在需要该符号 (libB) 的文件或库之前链接的库 (libA) 中定义,则该符号将被报告为丢失。

因此 libA libB 的顺序(其中 libB 取决于 libA)将触发错误,但是 libB libA 会好的。如果两个库相互依赖,则使用 libA libB libA 或使用 --start-group--end-group 链接器标志,链接器将在文件组中遍历,直到找到所有未解析的符号。

关于c++ - 由于 undefined symbol 'start_time',MEX 文件无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com