【问题标题】:Create an DLL written in Ada创建一个用 Ada 编写的 DLL
【发布时间】:2013-08-09 07:05:19
【问题描述】:

我正在尝试编写一个只做普通除法的 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

我的分包如下:

-- 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 完全陌生,所以请保持简单。

【问题讨论】:

    标签: gcc dll reference ada division


    【解决方案1】:

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

    【讨论】:

    • 谢谢!像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多