FMI-C标准库版本差异导致链接错误

FMI - C standard library version differences cause linking errors

我有一个 publicly-available FMU,我正尝试将其 link 嵌入的 .so 文件与我的程序的其余部分一起使用。 (如果您将其视为存档,则它包含在 .fmu 文件中。)在 linking 阶段,我收到以下未定义的引用错误:

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

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

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

U __vsnprintf_chk@@GLIBC_2.3.4

U _setjmp@@GLIBC_2.0

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

/lib/libc-2.5.so

/lib/libc.so.6

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

So my guess is that I don't have a new enough version of libc to link against.

正确。

Is it a requirement that the version of libc be exactly what the .so file calls out?

没有。您需要 GLIBC-2.11 或更高版本。有关说明,请参阅