【问题标题】:Why when gcc is built from source, libstdc++ is built for wrong architecture, 32bit, while 64 is expected?为什么当 gcc 从源代码构建时,libstdc++ 是为错误的架构构建的,32 位,而预期为 64?
【发布时间】:2019-09-02 13:06:05
【问题描述】:

我正在尝试使用 gcc 从源代码编译 lftp,该编译器也是我从主文件夹下的源代码编译的。 在构建步骤中出现错误:

/bin/sh ../libtool --silent  --tag=CXX   --mode=link g++  -O2 -Wall -Wwrite-strings -Woverloaded-virtual -fno-exceptions -fno-rtti -fno-implement-inlines -export-dynamic -s -o lftp lftp-lftp.o lftp-complete.o lftp-lftp_rl.o lftp-attach.o liblftp-jobs.la liblftp-tasks.la -L/usr/lib -lreadline -lutil -lncurses -ldl 
/gsa/pokgsa/home/l/e/leonidt/local/lib/../lib/libstdc++.so: error      adding symbols: File in wrong format

collect2:错误:ld 返回 1 个退出状态 make[2]: * [lftp] 错误 1 make[2]: 离开目录/gsa/pokgsa-h3/19/leonidt/local/lftp-4.8.4/src' make[1]: *** [install-recursive] Error 1 make[1]: Leaving directory/gsa/pokgsa-h3/19/leonidt/local/lftp-4.8.4' make: * [安装] 错误 2

所以看起来编译器是用 libstdc++.so 构建的,架构错误?

我试图检查 libstdc++.so 中的内容:

file /gsa/pokgsa/home/l/e/leonidt/local/lib/libstdc++.so
/gsa/pokgsa/home/l/e/leonidt/local/lib/libstdc++.so: symbolic link to `libstdc++.so.6.0.27'

file /gsa/pokgsa/home/l/e/leonidt/local/lib/libstdc++.so.6.0.27                    
/gsa/pokgsa/home/l/e/leonidt/local/lib/libstdc++.so.6.0.27: **ELF 32-bit** MSB shared object, IBM S/390, version 1 (GNU/Linux), dynamically linked, not stripped

以下是我在本地文件夹中构建 gcc 的步骤:

 cd ~/local 

解压gcc-9.2.0.tar.xz 使用 gcc 源创建 ~/local/gcc-9.2.0

cd ../gcc-9.2.0/

下载的先决条件

contrib/download_prerequisites

cd ~/local/gcc-build

../gcc-9.2.0/configure --prefix /gsa/pokgsa/home/l/e/leonidt/local/ --enable-languages=c,c++

我在 SuSe Linux 上:

uname -a

Linux zdsdeveng03 3.0.101-108.84-default #1 SMP Fri Nov 30 15:57:27 UTC 2018 (7a72692) s390x s390x s390x GNU/Linux

cat /etc/os-release                                                                                     NAME="SLES"           
VERSION="11.4"
VERSION_ID="11.4"
PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:11:4"

【问题讨论】:

    标签: gcc libstdc++


    【解决方案1】:

    您必须为配置脚本指定架构。

    https://gcc.gnu.org/install/configure.html

    【讨论】:

    • 谢谢你,斯威夫特。我几乎没有这方面的经验,希望您能指出要使用的具体选项。同时我将尝试:../gcc-9.2.0/configure --prefix /gsa/pokgsa/home/l/e/leonidt/local/ --enable-languages=c,c++ --with -arch-64=cpu
    • @Leonid Tepliakov 这取决于您对该构建有什么目的以及您的系统是否需要其他东西。我认为这样它将只支持 x64 并作为本机编译器工作
    • 谢谢你,斯威夫特。看起来这正是我所需要的。
    • make failed :( 检查 mkdir 是否采用一个参数...(缓存)否 此目标不支持 --with-arch_64。有效的 --with 选项为:arch mode tune make[2] : *** [configure-stage1-gcc] 错误 1 ​​make[2]: 离开目录/gsa/pokgsa-h3/19/leonidt/local/gcc-build' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory /gsa/pokgsa-h3/19/leonidt/local/gcc-build' make: *** [all] 错误 2有什么建议吗?
    • 尝试--with-cpu-64=cpu
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-08-01
    • 2019-02-13
    • 1970-01-01
    • 2010-12-01
    • 2012-05-01
    相关资源
    最近更新 更多