0

我有一个公开可用的 FMU,我正在尝试将嵌入式 .so 文件与我的程序的其余部分链接起来。(如果您将其视为存档,则该文件包含在 .fmu 文件中。)在链接阶段,我收到以下未定义的参考错误:

RoomHeating_OM_RH.so: undefined reference to '__longjmp_chk@GLIBC_2.11'

RoomHeating_OM_RH.so: undefined reference to '__fread_chk@GLIBC_2.7'

如果我使用类似的工具查看 RoomHeating_OM_RH.so 的内容nm -a,我会看到很多未定义的这种形式的引用,它们在链接时不会导致错误。以下是nm -a输出中的几行:

U __vsnprintf_chk@@GLIBC_2.3.4

U _setjmp@@GLIBC_2.0

但是,导致错误的错误与其他错误的区别在于它们的名称中有更新版本的 GLIBC。这是我 /lib 目录中用于 libc 库的内容(是的,我意识到这些是旧版本,但这是我现在所坚持的):

/lib/libc-2.5.so

/lib/libc.so.6

所以我的猜测是我没有足够新的 libc 版本来链接。是否要求 libc 的版本与 .so 文件所调用的版本完全相同?还是只需要等于或高于调用的版本?此外,FMI 规范是否甚至涵盖了兼容性的这一方面?还是假设FMU 中提供了IF .so 文件,它们必须使用与目标机器上安装的相同或更旧版本的库进行编译?

4

1 回答 1

1

所以我的猜测是我没有足够新的 libc 版本来链接。

正确的。

是否要求 libc 的版本与 .so 文件所调用的版本完全相同?

不,您需要 GLIBC-2.11或更新版本。请参阅此答案以获取解释。

于 2017-04-11T05:37:40.570 回答