2017-04-10 58 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文檔中提供這樣的依賴信息。 –