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

时间:2017-04-10 23:02:37

标签: linker glibc dynamic-linking undefined-reference fmi

我有一个publicly-available 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'

如果我使用nm -a之类的工具查看RoomHeating_OM_RH.so的内容,我会看到此表单的大量未定义引用在链接时不会导致错误。以下是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文件,它们必须使用与目标机器上安装的相同或较旧版本的库进行编译?

1 个答案:

答案 0 :(得分:1)

  

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

正确。

  

是否要求libc的版本正好是.so文件调用的内容?

没有。您需要GLIBC-2.11 或更新。有关说明,请参阅this answer