centos 7 结构体gcc 32位编译环境





1介绍



1.1背景

学习新 C++ 2011和C11标准。



1.2使用软件

CentOS 7(Linux version 3.10.0-123.el7.x86_64)

gcc version 4.8.2 20140120 (Red Hat 4.8.2-16)



1.3本次配置

32位gcc 开发环境。

由于 RHEL 7(红帽企业版 linux 7)已经不再提供32位版本号,短期内 CentOS 7也不会提供32位的版本号,故为了考虑升级和研究可用的操作系统,对开放环境进行配置。

64位版本号的CentOS 7眼下仅仅提供了GCC 4.8.2 64位版本号。默认不安装 GLIBC(version 2.17) 32位版本号。

1.4目的

构造CentOs 64位版本号下的 GCC 4.8.2 支持编译和执行32位程序。新标准编译环境。



2安装步骤

2.1安装GLIBC(32位)

安装 GLIBC 32位版本号。

yum --disablerepo=* --enablerepo=c6-media install glibc-2.17-55.el7.i686



2.2安装 gcc 4.8.2

安装完整的 gcc 4.8.2。

2.3拷贝执行库libgcc_s.so

如果 GCC 4.8.2 安装到/usr/local/gcc-4.8.2。须要把32位版本号的libgcc_s.so复制到32位库

/lib 以下。

cp /usr/local/gcc-4.8.2/lib/libgcc* /lib



2.4验证安装(C11)

[root@localhost src]# cat aa.c



#include <stdio.h>

#include <pthread.h>



//gcc -m32 -g -std=c11 aa.c -o aa -lpthread;./aa



void * f(void *data)

{

        //char buff[10];

        //char * p = 0;

        //memcpy(buff,"ddddddddddddddd",20);

        //memcpy(p,"sss",10);

        //p[0] = 'd';

        printf("centos 7,gcc 4.8.2 C11 test ok.\n");

        return 0;

}



int main(int argc,char * argv[])

{

        pthread_t t;

        pthread_create(&t,0,f,0);

        pthread_join(t,0);

        return 0;

}



gcc -m32 -g -std=c11 aa.c -o aa -lpthread;./aa;ldd aa

centos 7,gcc 4.8.2 C11 test ok.

        linux-gate.so.1 =>  (0xf77bb000)

        libpthread.so.0 => /lib/libpthread.so.0 (0xf7799000)

        libc.so.6 => /lib/libc.so.6 (0xf75db000)

/lib/ld-linux.so.2 (0xf77bc000)

实际上,看到编译出来的程序。并不须要链接libgcc_s.so.*,而仅仅须要 GLBC 的执行库,从ldd 查看应用程序链接的动态库能够明白看出来。应该是 GCC 须要上诉库,实际上是GCC套件的ld程序须要libgcc_s.so*库文件。

2.5验证安装(C++ 2011)

[root@localhost src]# cat aa.cpp  



#include <stdio.h>

#include <thread>

#include <functional>

#include <algorithm>

using namespace std::placeholders;

using namespace std;



//g++ -std=c++11 -g aa.cpp -o aa -lpthread;./aa



void * f(void *data)

{

        printf("centos 7,gcc 4.8.2 c++ 2011 test ok.\n");

        return 0;

}



int main(int argc,char * argv[])

{

        void *p;

        //std::function<void * (void *)> pf = std::bind(f,nullptr);

        auto pf = std::bind(f,nullptr);

        std::thread t(pf);

        //t.start();

        t.join();

        return 0;

}



[root@localhost src]# g++ -std=c++11 -g aa.cpp -o aa -lpthread;./aa;ldd aa

centos 7,gcc 4.8.2 c++ 2011 test ok.

        linux-vdso.so.1 =>  (0x00007fffe7d6c000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd40dd34000)

        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd40da2d000)

        libm.so.6 => /lib64/libm.so.6 (0x00007fd40d72a000)

        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd40d514000)

        libc.so.6 => /lib64/libc.so.6 (0x00007fd40d153000)

/lib64/ld-linux-x86-64.so.2 (0x00007fd40df58000)

版权声明:本文博客原创文章。博客,未经同意,不得转载。

CentOS 7 结构体GCC 4.8.2 32位编译环境的更多相关文章

  1. 64位CentOS安装32位开发环境编译Nachos

    参考http://stackoverflow.com/questions/7412548/gnu-stubs-32-h-no-such-file-or-directory 1.On CentOS 5. ...

  2. window安装gcc、g++、make等编译环境

    1. MinGW官网下载:http://www.mingw.org        点击右上角Downloads 点击下载 mingw-get-setup.exe 2. 百度网盘(2019年4月从官网下 ...

  3. centos 6.5 32位 编译安装Mysql

    groupadd mysql #添加mysql组 useradd -g mysql mysql -s /bin/false #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统 ...

  4. C++结构体中sizeof(1)

    sizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节. 返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的 ...

  5. 失落的C语言结构体封装艺术

    Eric S. Raymond <esr@thyrsus.com> 目录 1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 ...

  6. (转)失落的C语言结构体封装艺术

    目录1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 7.难以处理的标量的情况 8.可读性和缓存局部性 9.其他封装的技术 10.工具 ...

  7. C语言如何定义结构体

    原文地址 1. struct与typedef struct区别 struct是结构体的关键字,用来声明结构体变量如 struct  student {   char  num[10];      ch ...

  8. 结构体的数据对齐 #pragma浅谈

    之前若是有人拿个结构体或者联合体问我这个结构占用了多少字节的内存,我一定觉得这个人有点low, 直到某某公司的一个实习招聘模拟题的出现,让我不得不重新审视这个问题, 该问题大致如下: typedef ...

  9. Go第六篇之结构体剖析

    Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类型可以被实例化,使用new或&a ...

随机推荐

  1. 一张漫画说尽IT开发过程

  2. Android.9图片评论(一个)

    什么是.9图片 至于什么是.9图片这里就简单提一下,即图片后缀名前有.9的图片,如pic.9.png.pic1.9.jgp,诸如此类的图片就称为.9图片. .9图片的作用 ①.9图片的作用是在图片拉伸 ...

  3. [6] 算法路 - 双向冒泡排序的Shaker

    Shaker序列 –算法 1. 气泡排序的双向进行,先让气泡排序由左向右进行.再来让气泡排序由右往左进行,如此完毕一次排序的动作 2. 使用left与right两个旗标来记录左右两端已排序的元素位置. ...

  4. uva10067 Playing with Wheels 【建图+最短路】

    题目:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008">uva10067 Play ...

  5. 用命令行在github新建一个项目

    Github Repository API中说明了可以通过发送一个请求来认证,之后就能通过命令行自动新建远程仓库了. 认证 curl -u 'username' https://api.github. ...

  6. 【cocos2d-js公文】十八、Cocos2d-JS v3.0物业风格API

    1. 新的API风格 我们直接来看看你能够怎样使用Cocos2d-JS v3.0: 曾经的API 新的API node.setPosition(x, y); node.x = x; node.y = ...

  7. hibernate Disabling contextual LOB creation as connection was null

    使用hibernate通路sybase当遇到异常. Could not obtain connection metadata : ASE is now using a multi-byte c ...

  8. 查询(Query)和标识(Identify)

    查询(Query)和标识(Identify) 相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iP ...

  9. Java加深理解有关注释

    一.获取应用笔记 常常会遇到这种情况 package Tokyo.Hot; public class Demo { public static void main(String[] args) { n ...

  10. 【ORACLE】使用数据泵的生产环境impd,expdp数据迁移

    ********************************************** ** 原文: blog.csdn.net/clark_xu  徐长亮专栏 **************** ...