ar:在 devtoolset-11 中使用“ar”时无法识别文件格式,但适用于系统默认“ar”

问题描述 投票:0回答:1

当尝试使用 devtoolset-11 在基于 Fortran/C makefile 的项目中生成大型静态库时,“ar”步骤失败并显示: ar:first/object/in/alphabetical/order.o:无法识别文件格式

我正在使用基于 Red Hat Enterprise Linux Server 版本 7.9 (Maipo) 的 Podman 映像中包含的 devtoolset-11 安装。 Devtoolset-11 通过以下方式激活:“source /opt/rh/devtoolset-11/enable”,“which ar”打印“/opt/rh/devtoolset-11/root/usr/bin/ar”。 “ar --version”是“GNU ar 版本 2.36.1-1.el7.1”。

有趣的是,如果我重命名 devtoolset 的“ar”并创建链接“ln -s /usr/bin/ar /opt/rh/devtoolset-11/root/usr/bin/ar”,则构建完成没有问题,库就生成了!

我还尝试使用 devtoolset 的 'ar' 使用其中一个目标文件手动生成一个库,这也有效,所以看起来该对象实际上并不是使用与 'ar' 不兼容的 ELF 格式编译的。我还尝试使用 devtoolset-11 中的 gcc/gfortran 构建测试程序,并使用 devtoolset 的“ar”手动创建库,这也有效,它只在我的 makefile 项目的上下文中失败。

你知道这里会发生什么吗?为什么我可以使用系统默认的“ar”完成构建,但不能使用 devtoolset-11 中的构建?感谢任何见解。

linux gcc makefile linker devtoolset
1个回答
0
投票

我发现这个问题是由两个不同版本的“ar”的可用命令行标志的差异引起的。构建系统使用标志“rul”,“l”未列为系统“ar”的选项,而在 devtoolset-11 中包含的选项中,它被列为“[l] - 指定这个图书馆”。这种语法差异会导致出现有关无法识别的文件格式的消息。

© www.soinside.com 2019 - 2024. All rights reserved.