centos6.10 编译gcc11.5.0 支持mutilib(32bit,64bit)glibc2.11.3

我希望制作一个gcc,使用自带低版本glibc(2.11.3)系统自带glibc是2.12,同时要支持编译32位和64位代码,这样制作的gcc拷贝到其他高版本glibc系统,也可以生成兼容性好的代码

export SRC=/dd/gcc-src
export BUILD=/dd/gcc-build-x86
export TARGET=x86_64-linux-gnu
export PREFIX=/dd/x86_64-linux-gnu-gcc-11.5.0
export PATH=${PREFIX}/bin:$PATH

mkdir -p ${SRC}


linux内核安装
=========================================================
cd ${SRC}/linux-3.10.99/
make ARCH=x86_64 INSTALL_HDR_PATH=${PREFIX}/x86_64-linux-gnu headers_install
make ARCH=i386 INSTALL_HDR_PATH=${PREFIX}/i386-linux-gnu headers_install


binutils安装
=========================================================
mkdir -p ${BUILD}/binutils-2.29/
cd ${BUILD}/binutils-2.29/
${SRC}/binutils-2.29/configure --prefix=${PREFIX} --target=${TARGET} --enable-multilib
make -j8
make install


gcc第一次编译器
=========================================================
mkdir -p ${BUILD}/gcc-11.5.0/
cd ${BUILD}/gcc-11.5.0/
${SRC}/gcc-11.5.0/configure --prefix=${PREFIX} --target=${TARGET} --disable-multilib --disable-bootstrap --enable-languages=c --disable-werror --disable-nls --without-headers --disable-threads --disable-shared --disable-libsanitizer -disable-libssp --disable-libquadmath --disable-libgomp --disable-libvtv --disable-checking

make all-gcc -j8

make install-gcc

make all-target-libgcc -j8

make install-target-libgcc


glibc全量
=========================================================
mkdir -p ${BUILD}/glibc-2.11.3/
cd ${BUILD}/glibc-2.11.3/
${SRC}/glibc-2.11.3/configure --prefix=${PREFIX}/${TARGET} --build=x86_64-linux-gnu --host=${TARGET} --target=${TARGET} --with-headers=${PREFIX}/${TARGET}/include  --disable-multilib  libc_cv_forced_unwind=yes

${SRC}/glibc-2.11.3/configure --prefix=${PREFIX}/${TARGET} --build=x86_64-linux-gnu --with-binutils=${PREFIX}/bin --with-headers=${PREFIX}/${TARGET}/include libc_cv_forced_unwind=yes


mkdir -p ${BUILD}/glibc-2.11.3-i386
cd ${BUILD}/glibc-2.11.3-i386
${SRC}/glibc-2.11.3/configure --prefix=${PREFIX}/i386-linux-gnu --build=x86_64-linux-gnu --host=i686-linux-gnu --with-binutils=${PREFIX}/bin --with-headers=${PREFIX}/i386-linux-gnu/include libc_cv_forced_unwind=yes CC="gcc -m32  -U__i686" CXX="g++ -m32  -U__i686"

${SRC}/glibc-2.11.3/configure --prefix=${PREFIX}/i386-linux-gnu --build=x86_64-linux-gnu --host=i686-linux-gnu --with-headers=${PREFIX}/i386-linux-gnu/include libc_cv_forced_unwind=yes CC="gcc -m32" CXX="g++ -m32"

make -j8 
make install

上面编译很关键的一个参数 -U__i686 可以解决32位编译的一个报错,还是应为gcc11.5版本高了

这里glibc的安装目录,编译gcc的时候识别不到,gcc只能找几个固定位置的glibc

看完编译好的gcc查找路径

这是x86_64的

/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/../lib64/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../lib64/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/../lib64/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/../lib64/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/

这是i386的
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/32/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/11.5.0/32/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/../lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../x86_64-linux-gnu/11.5.0/32/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/x86_64-linux-gnu/11.5.0/32/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/../lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/x86_64-linux-gnu/11.5.0/32/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/../lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../../x86_64-linux-gnu/lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/lib/gcc/x86_64-linux-gnu/11.5.0/../../../
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/lib/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/x86_64-linux-gnu/11.5.0/
/dd/x86_64-linux-gnu-gcc-11.5.0/x86_64-linux-gnu/sys-root/usr/lib/

就知道怎么配置glibc的32位和64位的安装目录了,下次编glibc就知道怎么设置--prefix 还有关键的lib目录和include的目录的安装位置了,第一次编放错了只能手动copy到对应位置了,

64位glibc的的头文件和32位glibc的基本一样,区别是include/gnu/stubs-32.h include/gnu/stubs-64.h,其他的头64位生成的有包含对32位的条件编译宏,可以兼容32位。全部使用64位的include就好

64位glibc的库我放在了${PREFIX}/${TARGET}/lib64 

32位glibc的库我放在了${PREFIX}/${TARGET}/lib

还需要修改libc.so libpthread.so这两个脚本里面的路径,绝对路径改成相对路径就好,也方便编译好的gcc copy到其他系统时有效


gcc第二次全量1 glibc路径正确直接这个步骤
=========================================================
cd ${BUILD}/gcc-11.5.0/
${SRC}/gcc-11.5.0/configure --prefix=${PREFIX} --target=${TARGET} --disable-multilib --disable-bootstrap --enable-languages=c,c++ --disable-werror --disable-nls 

make -j8
make install


gcc第二次全量2 glibc路径不正确还可以用  --with-sysroot --with-native-system-header-dir调整
=========================================================
cd ${BUILD}/gcc-11.5.0/
${SRC}/gcc-11.5.0/configure --prefix=${PREFIX} --target=${TARGET} --host=${TARGET} --disable-bootstrap --enable-languages=c,c++ --disable-werror --disable-nls --enable-multilib  --with-multilib-list=m64,m32 CFLAGS="-I${PREFIX}/i386-linux-gnu/include -I${PREFIX}/x86_64-linux-gnu/include" CXXFLAGS="-I${PREFIX}/i386-linux-gnu/include -I${PREFIX}/x86_64-linux-gnu/include" LDFLAGS="-L${PREFIX}/i386-linux-gnu/lib -L${PREFIX}/x86_64-linux-gnu/lib"

--with-native-system-header-dir=/include --with-sysroot=${PREFIX}/${TARGET}

#--with-sysroot=/ --with-build-sysroot=${PREFIX}/${TARGET}
#上面(--with-sysroot的值) + (--with-native-system-header-dir的值)是include查找目录编译能成功,但是libc.so脚本内容路径要改
--with-native-system-header-dir必须绝对路径默认/usr/include,--with-sysroot内部有效

make -j8
make install
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35686.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流量分析实践

下载附件使用wireshark打开,发现数据包非常多,一共有1万多条数据,我们点击分析来看一下协议分级 然后我们再来看一下会话,看有哪些ip地址, 我们通过会话结合大部分的流量发现,172.17.0.1一直在请求172.17.0…

新手村:混淆矩阵

新手村:混淆矩阵 一、前置条件 知识点要求学习资源分类模型基础理解分类任务(如二分类、多分类)和常见分类算法(如逻辑回归、决策树)。《Hands-On Machine Learning with Scikit-Learn》Python基础熟悉变量、循环、函…

MYSQL库的操作

目录 一、创建数据库 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、查看系统支持的所有字符集以及字符集校验规则 3、指定字符集以及校验规则来创建数据库 4、校验规则对数据库的影响 三、操纵数据库 1、查看数据库 2、修改数据库 3、删除数据库 4、数…

Next App Router(下)

五、loading 新增 app/loading.tsx 页面 const Loading () > {return <div>Loading...</div>; }; export default Loading;修改 app/page.tsx页面 /** 假设为一个获取数字的api */ const fetch_getNumber async (): Promise<number> > {return ne…

【JAVA】】深入浅出了解cookie、session、jwt

文章目录 前言一、首先了解http的cookie是什么&#xff1f;Cookie 属性及其含义1. NameValue2. Expires3. Max-Age4. Domain5. Path6. Secure7. HttpOnly8. SameSite示例 Cookie 分类1. Session Cookies2. Persistent Cookies3. First-Party Cookies4. Third-Party Cookies 二、…

【css酷炫效果】纯CSS实现粒子旋转动画

【css酷炫效果】纯CSS实现粒子旋转动画 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492008 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…

C++Lambda表达式

Lambda表达式 什么是Lambda表达式 ​ C11的颁布让C丰富了起来&#xff0c;任何一本介绍C11的书籍&#xff0c;都不可能跳过这一个点——Lambda表达式。人们经常称Lambda表达式是一个语法糖&#xff0c;说明这是一个”没有没事&#xff0c;有了更好“的一种语法表达&#xff0…

每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN

本文重点 我们前面介绍了循环神经网络RNN,主要分析了它的维度信息,其实它的维度信息是最重要的,一旦我们把维度弄清楚了,一起就很简单了,本文我们正式的来学习一下,如何使用pytorch搭建循环神经网络RNN。 RNN的搭建 在pytorch中我们使用nn.RNN()就可以创建出RNN神经网络…

el-table树形表格合并相同的值

el-table树形表格合并相同的值 el-table树形表格合并相同的值让Ai进行优化后的代码 el-table树形表格合并相同的值 <style lang"scss" scoped> .tableBox {/deep/ &.el-table th:first-child,/deep/ &.el-table td:first-child {padding-left: 0;} } …

2025年3月19日 十二生肖 今日运势

小运播报&#xff1a;2025年3月19日&#xff0c;星期三&#xff0c;农历二月二十 &#xff08;乙巳年己卯月丁亥日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;兔、虎、羊 需要注意&#xff1a;猪、猴、蛇 喜神方位&#xff1a;正南方 财神方位&#xff1a;…

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念&#xff0c;接着会讲到Git的安装&#xff0c;Git常用的命令&#xff0c;以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。 1. SVN和Git介绍 1.1 SVN 集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&am…

QT5.15.2加载pdf为QGraphicsScene的背景

5.15.2使用pdf 必须要安装QT源码&#xff0c;可以看到编译器lib目录已经有pdf相关的lib文件&#xff0c;d是debug 1.找到源码目录&#xff1a;D:\soft\QT\5.15.2\Src\qtwebengine\include 复制这两个文件夹到编译器的包含目录中:D:\soft\QT\5.15.2\msvc2019_64\include 2.找…

【H2O2 | 软件开发】前端深拷贝的实现

目录 前言 开篇语 准备工作 正文 概述 JSON方法 递归 其他 结束语 前言 开篇语 本系列为短篇&#xff0c;每次讲述少量知识点&#xff0c;无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的&#xff0c;希望对诸位有所帮助。…

Docker - 切换源 (Linux / macOS)

文章目录 Linux 系统macOS 系统 Linux 系统 修改配置文件&#xff1a;/etc/docker/daemon.json "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]验证是否修改成功&#xff1a; docker info重启 …

hcia复习

一、网络设备 1、交换机&#xff1a;&#xff08;1&#xff09;提供MAC地址表&#xff0c;转发数据&#xff1b; &#xff08;2&#xff09;每个接口是一个独立的冲突域&#xff1b; &#xff08;3&#xff09;凡是连在交换机上的所有设备都处于同一广播域&#xff08;网络&am…

opencv初步学习——图像处理3

这一部分我们将学习opencv中对图像大小进行调整的基本操作&#xff0c;以及掩模操作&#xff0c;我们直接进入正言 一、cv2.resize( )函数 1-1、组成与构造 该函数的作用就算用来帮助我们实现对图像大小的处理&#xff0c;具体的组成与构造如下&#xff1a; cv2.resize(src , …

[LevelDB]关于LevelDB存储架构到底怎么设计的?

本文内容组织形式 LevelDB 存储架构重要特点总体概括LevelDB中内存模型MemTableMemTable的数据结构背景&#xff1a;SkipListSkiplist的数据结构 Skiplist的数据访问细节 SkipList的核心方法Node细节源代码 MemTable的数据加速方式Iterator 的核心方法 MemTable 的读取&写入…

【存储中间件】Redis核心技术与实战(四):Redis高并发高可用(Redis集群 Smart客户端、集群原理)

文章目录 Redis集群Smart客户端smart客户端原理ASK 重定向集群下的Jedis客户端Hash tags 集群原理节点通信通信流程Gossip 消息节点选择 故障转移故障发现主观下线客观下线 故障恢复资格检查准备选举时间发起选举选举投票替换主节点 故障转移时间 集群不可用判定集群读写分离 个…

【接口耗时】⭐️自定义拦截器实现接口耗时统计

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…

杨校老师课堂之编程入门与软件安装【图文笔记】

亲爱的同学们&#xff0c;热烈欢迎踏入青少年编程的奇妙世界&#xff01; 我是你们的授课老师杨校 &#xff0c;期待与大家一同开启编程之旅。 1. 轻松叩开编程之门 1.1 程序的定义及生活中的应用 程序是人与计算机沟通的工具。在日常生活中&#xff0c;像手机里的各类 APP、电…