ADA静态库 - 与不同版本的编译器兼容

时间:2015-11-10 08:19:05

标签: static-libraries ada

我已经构建了一个ADA静态库,我通过提供' .a'来共享它。和ALI文件。

当我使用与用于构建静态库的版本相同的GNAT编译器版本时,一切正常。

但是对于另一个编译器版本,ALI文件被认为无效(编译器版本存储在所有ALI文件中),编译器需要源文件来重建ALI文件。

是否有解决方案可以避免此问题?

在2015年11月12日更新:我们做了一些测试(只有ALI库文件准备就绪),但我们仍然有以下错误:

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

所以,我认为我们必须为库和程序使用相同的编译器版本。

2 个答案:

答案 0 :(得分:0)

如果您正在使用gnatmake,请将ALI文件设置为只读,以便编译器不会尝试重新编译它们(您当然负责确保目标文件兼容,但通常情况如此)

如果您使用的是项目文件,请添加

for Externally_Built use "True";

属性可以达到同样的效果。

答案 1 :(得分:0)

来自AdaCore的回答:

这是不受支持的:Ada ABI(应用程序二进制接口)不保证在不同版本中保持不变(确实经常更改),因此您不能混合使用不同版本的GNAT编译的对象,你真的需要确保所有库的一致性。

所以,这是不可能的。