2

我正在尝试从 Linux( Fedora 29 )交叉编译一个以 Windows 为目标的 Ada 程序。我对编译一无所知,Gnat 项目经理文档也无法帮助我这个菜鸟。我更喜欢在项目文件中使用开关,并使命令尽可能简单。我该怎么办?

我试过gprbuild -P logfilter.gpr --target=Windows这导致

Error: no compiler found for language 'c', target = Windows, default runtime
Error: no compiler found for language 'ada', target = Windows, default runtime
logfilter.gpr:3:09: warning: no compiler specified for language "Ada", ignoring all its sources
logfilter.gpr:7:19: "log_filter_main.adb" is not a source of project "logfilter"
gprbuild: problems with main sources

这是我的gprconfig

prconfig has found the following compilers on your PATH.
  Only those matching the target and the selected compilers are displayed.
   1. GNAT for Ada in /usr/bin/ version 8.3 (default runtime)
   2. GCC-ASM for Asm in /usr/bin/ version 8.3.1
   3. GCC-ASM for Asm2 in /usr/bin/ version 8.3.1
   4. GCC-ASM for Asm_Cpp in /usr/bin/ version 8.3.1
   5. LLVM for C in /usr/bin/ version 7.0.1
   6. GCC for C in /usr/bin/ version 8.3.1
   7. G++ for C++ in /usr/bin/ version 8.3.1

我的gprconfig --show-targets

List of targets supported by a compiler:
x86_64-redhat-linux
x86_64-unknown-linux-gnu

这是我的file.gpr

with "../../lib/gnat/gtkada";

project LogFilter is
    for Source_Dirs use ("src");
    for Object_Dir  use "obj";
    for Exec_Dir    use "exec";
    for Main use ("log_filter_main.adb");

   package Builder is
      for Executable ("main.adb") use "Logs_Filter";
   end Builder;

   package Compiler is
      for Switches ("ada") use ("-gnat2012");
   end Compiler;

end Logfilter;
4

2 回答 2

5

一旦我使用 Fedora 24 完成此操作。但这需要构建一个交叉编译器。我还有一个docker 镜像

Fedora 软件包的补丁

我在 Fedora 上填写了一个请求,要求在交叉编译器的 Windows 中包含 ada,但他们关闭了它。但是,我找不到错误编号。

告诉我你是否对这个的新版本或如何使用的说明感兴趣。

更新:我已经为 FC29 重建了十字架。你可以这样尝试:

dnf copr enable reznik/ada
dnf install mingw64-gcc-gnat
dnf install gprbuild

sed -i -e 's/-pc-mingw/-w64-mingw/g' /usr/share/gprconfig/*

cat > hello.adb << EOF
with Ada.Text_IO;
procedure Hello is
begin
   Ada.Text_IO.Put_Line ("Hello");
end Hello;
EOF

cat > hello.gpr << EOF
project Hello is
   for Main use ("hello.adb");
end Hello;
EOF
gprbuild --target=x86_64-w64-mingw32 -P hello.gpr
file hello.exe

hello.exe: PE32+ executable (console) x86-64, for MS Windows

PS:链接到copr

于 2019-08-02T11:38:37.397 回答
4

正如其他人指出的那样,您遇到的问题是因为您没有使用交叉编译器。只是为了澄清一些gprbuild可能会使这一点更清楚:只是系统版本和系统上gprbuild的前端。本质上,它只是 Ada 特定的类似物。它处理项目配置文件并确定要构建项目的哪些部分。从输出看来,您使用的是从 Fedora 存储库获得的 FSF GNAT。仅向您显示在您的.gccgnatmakegprconfiggprconfig --show-targets$PATH

要解决您的问题,您需要找到针对 Windows 的 Ada 编译器。如果您愿意,AdaCore 提供了一个相当不错的原生 Windows 编译器。

于 2019-08-04T05:53:40.677 回答