我已经构建了一个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)
所以,我认为我们必须为库和程序使用相同的编译器版本。
答案 0 :(得分:0)
如果您正在使用gnatmake,请将ALI文件设置为只读,以便编译器不会尝试重新编译它们(您当然负责确保目标文件兼容,但通常情况如此)
如果您使用的是项目文件,请添加
for Externally_Built use "True";
属性可以达到同样的效果。
答案 1 :(得分:0)
来自AdaCore的回答:
这是不受支持的:Ada ABI(应用程序二进制接口)不保证在不同版本中保持不变(确实经常更改),因此您不能混合使用不同版本的GNAT编译的对象,你真的需要确保所有库的一致性。
所以,这是不可能的。