我在 Ubuntu 上,尝试为运行 Busybox 的旧 ARM 设备构建 GNU 屏幕。我在 /usr/local/toolchain 中安装了一个自定义交叉编译工具链。我下载了 screen 4.3.1(7 年前的版本,考虑到我的工具链来自那个时代,这似乎很合适)。 screen 的配置脚本假设我的主机 PC 是目标并检测 Busybox 上不存在的各种功能,因此我必须设置一些选项以使其使用工具链文件而不是主机。我的最终命令及其结果是:
$ CC=/usr/local/toolchain/usr/bin/arm-linux-gcc ./configure --host=arm-linux-gnueabi --prefix=/usr/local/toolchain/usr
this is screen version 4.3.1
checking for arm-linux-gnueabi-gcc... /usr/local/toolchain/usr/bin/arm-linux-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /usr/local/toolchain/usr/bin/arm-linux-gcc accepts -g... yes
checking for /usr/local/toolchain/usr/bin/arm-linux-gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... /usr/local/toolchain/usr/bin/arm-linux-gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking whether /usr/local/toolchain/usr/bin/arm-linux-gcc needs -traditional... no
checking for library containing strerror... none required
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
configure: error: in `/home/user1/dev/playground/screen-v.4.3.1/src':
configure: error: cannot run test program while cross compiling
See `config.log' for more details
config.log的相关部分:
...
292 │ configure:3633: checking whether it is safe to define __EXTENSIONS__
293 │ configure:3651: /usr/local/toolchain/usr/bin/arm-linux-gcc -c -g -O2 conftest.c >&5
294 │ configure:3651: $? = 0
295 │ configure:3658: result: yes
296 │ configure:3674: error: in `/home/user1/dev/playground/screen-v.4.3.1/src':
297 │ configure:3676: error: cannot run test program while cross compiling
298 │ See `config.log' for more details
名为 cross_compiling 的配置测试失败,但不清楚原因。我发现这个问题如何在交叉编译 glib 时禁用测试程序,它教我如何使用站点文件来禁用测试,但是当我禁用 cross_compiling 时,它会失败并显示“C 编译器无法创建可执行文件”,这不是我可以禁用的测试。
我肯定已经使用同一个编译器进行了交叉编译,因此没有问题。屏幕的配置对于新手来说似乎太复杂了,我陷入了困境。有什么建议吗?
答案1
正如上面提到的交叉编译时无法运行测试程序 - 交叉编译 Firebird您可以通过删除所有“AC_TRY_RUN”功能块来“改进”configure.in 文件。这种解决方法是可行的。
否则,您可以使用构建容器并运行其中的所有内容。