2017-04-10 27 views
0

我有一个publicly-available FMU我试图将嵌入式.so文件与我的程序的其余部分链接。 (如果您查看作为归档这个包含在.fmu文件中。)在链接阶段我得到以下未定义的引用错误:FMI - C标准库版本差异导致链接错误

RoomHeating_OM_RH.so: undefined reference to '[email protected]_2.11'

RoomHeating_OM_RH.so: undefined reference to '[email protected]_2.7'

如果我看内容使用类似nm -a的工具,我看到很多未定义的此表单引用,这些引用在链接时不会导致错误。这里有几个这样的线从nm -a输出:

U [email protected]@GLIBC_2.3.4

U [email protected]@GLIBC_2.0

然而,这是导致错误的那些被事实,即他们的glibc新版本从他们的休息分化在名字里。下面是我在我的libc库/ lib目录(是的,我知道这是旧版本,但它是什么,我坚持与现在):

/lib/libc-2.5.so

/lib/libc.so.6

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

回答

1

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

正确。

是否要求libc的版本正是.so文件调出的要求?

不需要GLIBC-2.11 或更新版本。有关说明,请参阅this answer

+0

谢谢。这解决了我与图书馆版本的第一个问题。不过,我仍然对FMI规范在这个级别上缺乏粒度感兴趣。当这些库的特定内容将确定FMI是否与目标环境兼容时,规范不会涵盖“库”。它似乎也应该定义这些细节。 – Iniamyen

+0

我希望出口商在FMU中包含的index.html文档中提供这样的依赖信息。 –