2017-04-10 2 views
0

Ich habe eine publicly-available FMU, für die ich versuche, die eingebettete .so-Datei mit dem Rest meines Programms zu verknüpfen. (Dies ist in der .fmu Datei enthalten, wenn Sie als Archiv anzuzeigen.) Während der Verknüpfung der Phase I die folgenden nicht definierten Referenzfehler bin immer:FMI - C Standardbibliothek Versionsunterschiede verursachen Verbindungsfehler

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

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

Wenn ich auf den Inhalt schauen von RoomHeating_OM_RH.so mit einem Tool wie nm -a, sehe ich viele undefinierte Referenzen dieses Formulars, die keine Fehler bei Link-Zeit verursachen. Hier sind ein paar solche Zeilen aus dem nm -a Ausgang:

U [email protected]@GLIBC_2.3.4

U [email protected]@GLIBC_2.0

jedoch diejenigen, die Fehler verursachen, werden von dem Rest von ihnen unterscheiden sich durch die Tatsache, dass sie neuere Versionen von GLIBC im Namen. Hier ist, was ich in meinem/lib dir für die libc-Bibliothek haben (ja, ich erkennen, diese alten Versionen sind, aber es ist das, was ich stecke mit jetzt):

/lib/libc-2.5.so

/lib/libc.so.6

So meine Vermutung ist, dass ich keine neue Version von libc habe, mit der ich verlinken kann. Ist es eine Voraussetzung, dass die Version von libc genau das ist, was die .so-Datei aufruft? Oder muss es nur gleich oder neuer als die genannte Version sein? Umfasst die FMI-Spezifikation sogar diesen Kompatibilitätsaspekt? Oder setzt es voraus, dass IF .so Dateien in der FMU zur Verfügung gestellt werden, dass sie mit den gleichen oder älteren Versionen von Bibliotheken kompiliert werden müssen, die auf dem Zielrechner installiert werden?

Antwort

1

Also meine Vermutung ist, dass ich nicht eine neu genug Version von libc gegen zu verknüpfen habe.

Korrekt.

Ist es eine Voraussetzung, dass die Version von libc genau das ist, was die .so-Datei ausgibt?

Nein. Sie benötigen GLIBC-2.11 oder neuer. Eine Erläuterung finden Sie unter this answer.

+0

Vielen Dank. Dies löst mein erstes Problem mit Bibliotheksversionen. Ich bin jedoch immer noch an der mangelnden Granularität der FMI-Spezifikation auf diesem Niveau interessiert. Es scheint nicht ausreichend zu sein, dass die Spezifikation "Bibliotheken" abdeckt, wenn der spezifische Inhalt dieser Bibliotheken bestimmen wird, ob das FMI mit der Zielumgebung kompatibel ist. Es scheint, als ob es diese Details auch definieren sollte. – Iniamyen

+0

Ich würde erwarten, dass Exporteure solche Abhängigkeitsinformationen in der index.html Dokumentation in der FMU bereitstellen würden. –