1

我花了很长时间才找到解决此错误的方法。当尝试为 Arm 交叉编译 Apache 时(我确信这可能会发生在许多其他架构中),我会从服务器文件夹中得到这个错误:

 ./gen_test_char: cannot execute binary file

这意味着 Apache 正在尝试为实际设备编译这个 test_char.h 生成器,而我需要它在我正在交叉编译的 Ubuntu 上运行。Ubuntu 无法将编译后的 gen_test_char 识别为可执行文件,因此我需要为 Ubuntu 正确编译它。

4

2 回答 2

2

我搜索和搜索,发现几次尝试修补,但都没有奏效。其中大部分是 Apache 开发组直接建议的补丁。

但我终于遇到了这个Apache 邮件列表。它提出了补丁无法提供的直接解决方案。

在尝试交叉编译 Apache 之前编译 gen_test_char 应用程序。所以我做了。并遵循建议,它就像一个魅力。

相反,只需使用以下内容编译 gen_test_char.c 1st: gcc -Wall -O2 -DCROSS_COMPILE gen_test_char.c -s -o gen_test_char 然后运行它并将其输出放入包含文件夹(或正常放置的位置);

并在此编译后运行它以获得所需的输出:

 ./gen_test_char > test_char.h
于 2013-08-23T17:24:19.570 回答
1

这些是基于CaptainBli 在他的回答中链接的Apache 邮件列表对我有用的具体步骤。我正在从 x86_64 机器交叉编译 ARM。

首先,配置并运行 make 进行交叉编译。一旦由于 gen_test_char 可执行文件问题而导致编译失败,请进入tools/文件夹并为您的构建系统重新编译 gen_test_char:

$ pwd
.../apr-1.7.0
$ cd tools/
$ gcc -Wall -O2 -DCROSS_COMPILE gen_test_char.c -s -o gen_test_char

现在,make像以前一样运行,它将从上次中断的地方开始,除了这次它将使用gen_test_char构建为在您的构建系统上运行的可执行文件。不要先运行make clean- 这将清除您刚刚构建的可执行文件,您将回到原点。

于 2019-05-22T17:46:26.390 回答