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)