我有一个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文件,它们必须使用与目标机器上安装的相同或较旧版本的库进行编译?
答案 0 :(得分:1)