2015-11-10 78 views
0

我已經構建了一個ADA靜態庫,並通過提供'.a'和ALI文件來共享它。ADA靜態庫 - 兼容不同版本的編譯器

一切工作正常,而我使用相同的GNAT編譯器版本比用於建立靜態庫。

但是在另一個編譯器版本中,ALI文件被認爲無效(編譯器版本存儲在所有ALI文件中),編譯器需要源文件來重建ALI文件。

有沒有解決方案來避免這個問題?

更新2015年12月11日:我們做了一些測試(與俱備只ALI庫文件),但是我們仍然有以下錯誤:

error: "package1.adb" and "prog.adb" compiled with different GNAT versions 
error: "prog.adb" must be recompiled ("system.ads" has been modified) 

所以,我認爲我們必須對庫和程序使用相同的編譯器版本。

回答

0

答:

這是不支持:阿達ABI(應用程序二進制接口)不能保證保持不變不同版本(事實上也定期更換),所以你不能混用對象編譯使用不同版本的GNAT,您確實需要確保您所有庫中的一致性。

所以,這是不可能的。

0

如果您使用的是gnatmake,請將ALI文件設置爲只讀,以便編譯器不會嘗試重新編譯它們(您當然負責確保目標文件是兼容的,但通常情況下)。

如果使用的是項目文件,添加一個

for Externally_Built use "True"; 

屬性來達到同樣的效果。從AdaCore

+0

感謝您的回答。我已經在我的庫項目中使用了Externally_Built屬性。我會試着把ALI文件設置爲只讀。 – remy40

+0

如果您正在使用庫項目,那麼您應該查看「獨立庫」,然後在gprbuild文檔中查看。在你的情況下,這些可能會更好。 – manuBriot

+0

感謝您的幫助。我已更新了我的初始帖子。獨立庫對我們來說並不是真正的解決方案。 – remy40