创建一个用Ada编写的DLL

时间:2013-08-09 07:05:19

标签: gcc dll reference ada division

我正在尝试编写一个只做共同分裂的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的新手所以请保持简单。

1 个答案:

答案 0 :(得分:3)

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

您的项目(称为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。