我有一个具有两个功能的 Ada 源文件:
procedure Ghdl_Psl_Assert_Failed
(Str : Std_String_Ptr; Severity : Integer; Loc : Ghdl_Location_Ptr) is
begin
Do_Report ("psl assertion", Str, "Assertion violation", Severity, Loc);
end Ghdl_Psl_Assert_Failed;
和
procedure Ghdl_Psl_Assume_Failed (Loc : Ghdl_Location_Ptr) is
begin
Do_Report ("psl assumption", null, "Assumption violation",
Error_Severity, Loc);
end Ghdl_Psl_Assume_Failed;
这两个函数都导出为 C 风格的符号,如下所示:
pragma Export (C, Ghdl_Psl_Assert_Failed, "__ghdl_psl_assert_failed");
pragma Export (C, Ghdl_Psl_Assume_Failed, "__ghdl_psl_assume_failed");
我像这样构建文件,至少对于一个测试用例,以显示问题:
g++ -c -Isrc/ghdl -g -I- src/ghdl/grt-lib.adb
当我nm
用来查看符号表时,我看到它__ghdl_psl_assert_failed
出现了,但__ghdl_psl_assume_failed
没有。
编译器似乎以某种方式Ghdl_Psl_Assume_Failed()
忽略了它,但除此之外我没有任何线索。当另一个源文件抱怨无法找到该函数时,我看到该错误出现在我的项目的完整构建中:
g++ -c -Isrc/ghdl/ -Isrc/clib -Isrc/zlib -Isrc/nuttx/nuttx/include -Isrc/nuttx/nuttx/uclibc/include/uClibc++ -Isrc/nuttx/nuttx/include/cxx -Isrc/nuttx/nuttx/include/nuttx/lib -Isrc/ghdl -g -I- -o /home/jon/controlix/bin/src/ghdl/ghdlrun.o src/ghdl/ghdlrun.adb
ghdlrun.adb:345:19: "Ghdl_Psl_Assume_Failed" not declared in "Lib"
gnatmake: "src/ghdl/ghdlrun.adb" compilation error
有任何想法吗?看起来这个问题在原始 GHDL 构建系统中不存在,但我必须使用我的项目的构建系统,它不使用 GHDL 使用的标准 GNAT 项目构建系统。