Gcc 创建用Ada编写的DLL
我正在尝试编写一个ADADDLL,它只做公约数运算。问题是我无法创建DLL,因为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
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。谢谢!工作得很有魅力。