Gcc 创建用Ada编写的DLL

Gcc 创建用Ada编写的DLL,gcc,dll,reference,ada,division,Gcc,Dll,Reference,Ada,Division,我正在尝试编写一个ADADDLL,它只做公约数运算。问题是我无法创建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_Divid

我正在尝试编写一个ADADDLL,它只做公约数运算。问题是我无法创建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的新手,所以请保持简单

在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。

谢谢!工作得很有魅力。