使用导出的函数编译未引用的包
Compile unreferenced package with exported functions
在混合Ada 和C 的项目中,我定义并导出要在C 程序中调用的Ada 函数。编译链很复杂,我无法对其进行任何更改,但是当我编译项目时,编译器完全排除了包含导出函数并因此未被任何 Ada 代码调用的包。这意味着链接器无法完成其工作,因为它缺少外部函数。
例如这个简单的三文件项目:
Main.adb
with Ada.Text_IO;
procedure Main is
begin
Ada.Text_IO.Put_Line ("Hello ada community");
end Main;
test.ads
package Test is
procedure Hello
with Export => True,
Convention => C,
Link_Name => "test_hello";
end Test;
test.adb
with Ada.Text_IO;
package body Test is
procedure Hello is
begin
Ada.Text_IO.Put_Line ("Hello world");
end Hello;
end Test;
当我编译我的项目时,包 Test 被编译器忽略了。是否有编译指示强制编译器导出符号并编译包?
找到了非常明显的解决方案。我只需要将包包含在 main.adb 文件中。
在混合Ada 和C 的项目中,我定义并导出要在C 程序中调用的Ada 函数。编译链很复杂,我无法对其进行任何更改,但是当我编译项目时,编译器完全排除了包含导出函数并因此未被任何 Ada 代码调用的包。这意味着链接器无法完成其工作,因为它缺少外部函数。
例如这个简单的三文件项目:
Main.adb
with Ada.Text_IO;
procedure Main is
begin
Ada.Text_IO.Put_Line ("Hello ada community");
end Main;
test.ads
package Test is
procedure Hello
with Export => True,
Convention => C,
Link_Name => "test_hello";
end Test;
test.adb
with Ada.Text_IO;
package body Test is
procedure Hello is
begin
Ada.Text_IO.Put_Line ("Hello world");
end Hello;
end Test;
当我编译我的项目时,包 Test 被编译器忽略了。是否有编译指示强制编译器导出符号并编译包?
找到了非常明显的解决方案。我只需要将包包含在 main.adb 文件中。