1. 程式人生 > >CentOS 7 構造GCC 4.8.2 32位編譯環境

CentOS 7 構造GCC 4.8.2 32位編譯環境


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)
[
[email protected]
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)
[[email protected] 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;
}

[
[email protected]
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編譯環境

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 (

64 SUSE 下GCC 4.8.2 編譯的 skipping incompatible 問題

最近把GCC升級到了 4.8.2 ,結果編譯的時候提示以下錯誤: /usr/bin/ld: skipping incompatible /usr/local/lib/libstdc++.so when searching for -lstdc++ /usr/bin/ld:

centos 7安裝gcc 8.2

#!/bin/bashyum -y install bzip2 gcc gcc-c++ glibc-headerswget -c -P /opt/tmp/ wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gzt

CentOS 7安裝GCC 8.2 實錄

#!/bin/bash yum -y install bzip2 gcc gcc-c++ glibc-headers wget -c -P /opt/tmp/ wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-8.2.0/gcc-8.2.0.t

centos升級gcc4.8.2(cc1plus: 錯誤:無法識別的命令列選項“-std=c++11”)

驗證:gcc -v;或者g++ -v,如果顯示的gcc版本仍是以前的版本,就需要重啟系統;或者可以檢視gcc的安裝位置:which gcc;然後在檢視版本 /usr/local/bin/gcc -v,通常gcc都安裝在該處位置

CentOS 6.4編譯安裝GCC 4.8.1 + GDB 7.6.1

在CentOS 6.4中編譯安裝GCC 4.8.1 + GDB 7.6.1  一、編譯安裝gcc 4.8.1 1. 安裝gcc和g++ 新安裝的CentOS缺少編譯環境,必須先安裝舊版本的gcc, 然後再進行自舉編譯 yum -y install gcc  yum -y i

CentOS 6.6 64bit上升級GCC4.8.2版本

作業系統CentOS6.6 64bit上gcc原版本4.4.7,不能支援C++11的特性~,為了便於YouCompleteMe外掛,我希望升級到4.8.2。不能通過yum的方法升級,需要自己手動下載安裝包並編譯,下面假定都是以root使用者安裝。 一、升級過程 1.獲取gc

Centos 6.9 編譯安裝gcc 4.8.5

cache war dev 優化 string 環境 沒有 組件 bject 前言 GCC(GNU Compiler Collection,GNU編譯器合集)是linux以及其他類UNIX平臺上進行開源項目,軟件開發等必不可少的工具鏈組成之一。(其他的還有clang以及ll

CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日誌集成環境搭建完整指南

pan 而是 17. 現在 關於 vim 提高 用處 新版 現在的公司由於絕大部分項目都采用分布式架構,很早就采用ELK了,只不過最近因為額外的工作需要,仔細的研究了分布式系統中,怎麽樣的日誌規範和架構才是合理和能夠有效提高問題排查效率的。經過仔細的分析和研究,確定下面的架

CentOS 7安裝部署ELK 6.2.4

ELK CentOS7 日誌服務器 日誌管理 安裝ELK 一、ELK介紹 ELK是三款開源軟件的縮寫,即:ElasticSearch + Logstash + Kibana。這三個工具組合形成了一套實用、易用的監控架構,可抓取系統日誌、apache日誌、nginx日誌、mysql日誌等多種

通過yum升級gcc/g++至版本4.8.2

最近在坐一個日期處理的問題,需要安裝sxtwl模組,但是gcc版本4.7死活也安裝不上,最後測試到只能升級gcc版本到4.8才得以解決 [[email protected] bin]# gcc -vUsing built-in specs.Target: x86_64-redhat-linuxT

Linux下的ds18b20驅動(執行環境 Fedora9.0 交叉編譯 arm-linux-gcc-4.3.2 核心版本2.6.32

今天在各位前輩已有成就的基礎上花了兩天時間終於把這個驅動給搞定了,從開始編譯成模組看效果,進行除錯,再到編譯進核心,最後又編譯了一個介面出來,雖說大多數的程式程式碼是用各位前輩的成果,但坐下來自己收穫也不小,現在寫下來,以供以後參考,也和各位愛好者交流一下,呵呵! 一.編譯成

RedHat gcc編譯器版本升級到4.8.2支援C++11標準

原來環境資訊 Red Hat Enterprise Linux Server release 6.4 (Santiago) gcc4.4.7 升級到gcc4.8.2 gcc4.8以上版本才支援C++11標準,網上很多都是裝的4.8系列的版本,

實驗:centos 7.3二進位制安裝mariadb10.2.8及指令碼安裝

(1)檢視系統中是否存在mysql [[email protected] ~]# rpm -qa mariadb* [[email protected] ~]# 注意:存在則刪除 yum remove mysql (2)準備使用者 getent

CentOS 7 安裝 Redis-4.0.8

1 獲取 Redis 原始碼包 1.1 方式一 1.2 方式二 使用 wget 命令獲取 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2 編譯 Red

Centos 7安裝Grafana 4及結合Zabbix3.2實現視覺化監控圖形

  Grafana 是 Graphite 和 InfluxDB 儀表盤和圖形編輯器。Grafana 是開源的,功能齊全的度量儀表盤和圖形編輯器,支援 Graphite,InfluxDB 和 OpenTSDB。   Grafana 主要特性:靈活豐富的圖形化選項;可以混合多種

【轉】CentOS 7.0 安裝Redis 3.2.1詳細過程和使用常見問題

nec count ges des useful 內存 warning before outside http://www.linuxidc.com/Linux/2016-09/135071.htm 環境:CentOS 7.0 Redis 3.2.1 Redis的安裝與啟動

Centos 7.X 安裝JDK1.8

head -i openjdk img grep 配置 har 解壓縮 ftp 一、查看本機jdk版本並卸載原有openjdk 查看 # java -version openjdk version "1.8.0_144" O

CentOS 7安裝Samba 4.6 版本步驟及錯誤解決方法

style chmod tab root 必須 共享文件夾 默認 mini div 首先通過這次教訓,讓我養成一個好習慣:備份 備份 備份 不管做什麽配置或者更改什麽東西之前先做好備份! 還有我本身的一個壞毛病:眼高手低! 工廠有一臺服務器,由以前的運維裝的S

centos6 x64下編譯gcc-4.8.5

x64 ref -m bash blog 隔離 entos sta 依賴 編譯gcc最重要的事情是,確保環境的隔離,既不要影響編譯環境本身,又要讓原有的編譯器能找到相關的依賴。假定編譯新版本gcc所需的額外依賴都放在/opt/xxx。 1. 從 ftp://gcc.gnu.