2

我正在尝试编写一个只做共同除法的 Ada DLL。问题是我无法创建 DLL,因为 Ada 中的除法接缝使用和异常(可能检查分母是否非零),因此当我尝试创建 DLL 时给我以下错误消息:

C:\Programs\GPS\Math>gcc -shared -shared-libgcc -o math.dll division.o
division.o:division.adb:(.text+0x1f): undefined reference to
`__gnat_rcheck_CE_Divide_By_Zero'
collect2.exe: error: ld returned 1 exit status

我的 divison 包如下所示:

-- division.ads
package Division is
   function Div
     (A : INTEGER;
      B : INTEGER)
      return INTEGER;
   pragma Export (CPP, Div);
end Division;

--division.adb
package body Division is
   function Div(A : INTEGER; B : INTEGER) return INTEGER is
      X : INTEGER := A/B;
   begin
      return X;
   end Div;
end Division;

是否可以通过某种方式创建此 DLL?我对 Ada 完全陌生,所以请保持简单。

4

1 回答 1

3

在 ada 中创建 DLL 的最简单方法是使用 GNAT 项目文件。您可以在此处查看文档

您的项目(称为 proj_name.gpr 或您喜欢的其他任何内容)文件如下所示:

library project Proj_Name is
  for Library_Name use "math";
  for Object_Dir use "obj";
  for Source_Dirs use ("src");
  for Library_Dir use "lib";
  for Library_Interface use ("Division");
  for Library_Kind use "dynamic";
end Proj_Name;

假设您的源代码位于 src 目录中,您希望目标文件在 obj 目录中编译,并且您希望在 lib 目录中输出 dll。

要编译库,您必须使用 gnatmake :(gnatmake -P ./proj_name.gpr -p说明-P要使用的项目文件,-p说明创建任何需要的目录)。

在 linux 上它创建 lib/libmath.so 并且应该在 Windows 系统上创建 lib/libmath.dll。

于 2013-08-09T14:40:14.367 回答