首页 > 其他分享 >编译安装 gcc 4.9并验证使用

编译安装 gcc 4.9并验证使用

时间:2023-06-08 21:04:51浏览次数:40  
标签:std gcc 4.9 编译 include local


编译安装 gcc 4.9并验证使用

1. 准备环境(GCC 编译器)
centOS 6.3
cat /proc/version 
Linux version 2.6.32-279.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Jun 22 12:19:21 UTC 2012
gcc --version
gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)

2. 准备文件
gcc-4.9.0.tar.gz
官网(http://gcc.gnu.org/)下载:

ftp://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz

http://gcc.petsads.us/releases/


3. 安装步骤


3.1. 解压 gcc-4.9.0.tar.gz


得到目录 gcc-4.9.0,进入目录


#tar -xvzf gcc-4.9.0.tar.gz


#cd gcc-4.9.0



3.2. 下载编译准备文件


主要是需要下面的库文件(需要完整版本,下载全部文件)


MPFR=mpfr-2.4.2


GMP=gmp-4.3.2


MPC=mpc-0.8.1


ISL=isl-0.12.2


CLOOG=cloog-0.18.1


执行./contrib/download_prerequisites


如果编译机器不能上网,直接打开文本文件 download_prerequisites,把里面


依赖的库下载回来后,放在指定目录,然后注释下载命令,再次执行


contrib/download_prerequisites,把相关文件解压,并建立链接。


#vi contrib/download_prerequisites


注释 wget 相关的内容,手动把这些文件下载回来,拷贝到工作目录 gcc-4.9.0下。


#./contrib/download_prerequisites



3.3. 创建编译目录并编译安装


#mkdir ../gcc-build-4.9.0


#cd ../gcc-build-4.9.0

#../gcc-4.9.0/configure --prefix=/usr/local/gcc-4.9.0 --enable-stage1-checking=release --enable-stage1-languages=c,c++,go

#make -j 4



#make install


编译后安装到  /usr/local/gcc-4.9.0



3.4. 验证安装


#cd /usr/local/gcc-4.9.0


#./bin/gcc -v


看到版本信息


...


线程模型:posix


gcc 版本 4.9.0 (GCC) 



3.5. 验证编译功能(C++ 2011)


构造代码文件 test_gcc4.9.cpp,内容如下:

#include <string.h> 

#include <iostream> 

#include <stdio.h> 

#include <thread>  

#include <future> 

using namespace std; 


template<typename T> T stringcat(T &x,T &y) 

{ 

    std::cout<<"stringcat start...."<<endl; 

    x += x; 

    y += y; 


        //睡眠指定毫秒数 

    std::this_thread::sleep_for(std::chrono::milliseconds(1000)); 


    std::cout<<"stringcat end...."<<endl; 

    return x + y; 

} 


template<typename T> class CTheadOperator 

{ 

    public: 

           //采有创建线程发起异步调用 

           void createthread(); 

}; 


template<typename T> void CTheadOperator<T>::createthread() 

{ 

    std::string x = "x",y = "y"; 

    auto b = std::bind(stringcat<std::string>,x,y); 

    std::cout<<"createthread wait stringcat....\n"; 

    std::thread tp(b); 

    tp.join(); 

     //注意观察返回值的变化 

    std::cout<<"无参数被修改 "<<x<<" "<<y<<endl; 

} 


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

{ 

     CTheadOperator<std::string> tp; 

     tp.createthread(); 



    return 0; 

}




编译执行,注意看参数 -std=c++11,-lstdc++,证明是使用新标准


查看链接的动态库,是新的库


编译后的文件可执行,执行正常


#/usr/local/gcc-4.9.0/bin/g++ -Wwrite-strings -std=c++11 test_gcc4.9.cpp -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lstdc++ -fpermissive -lpthread 

#ldd test_gcc4.9 

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

      
   libstdc++.so.6 => /usr/local/gcc-4.9.0/lib64/libstdc++.so.6 (0x00007f94ae037000) 

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

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

        libgcc_s.so.1 => /usr/local/gcc-4.9.0/lib64/libgcc_s.so.1 (0x00007f94ade07000) 

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

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

#./test_gcc4.9  

createthread wait stringcat.... 

stringcat start.... 

stringcat end....



无参数被修改 x y        



3.6. 验证编译功能(C11),缺少 threads.h文件,编译失败


创建文件test_gcc4.9.c,内容如下:


#include <string.h> 

#include <stdio.h> 

//注意这行,路径不一致 

#include <thr/threads.h> 


//注意这个,函数定义必须是 

//typedef int(*_Thrd_start_t)(void *); 

int fun(void *data) 

{ 

    printf("thread=%d\n", thrd_current()); 

    //std::map<std::string, std::string> m; 

    //m.insert(std::make_pair("a1", "b1")); 

    //auto result = m.insert(std::make_pair("a1", "b1")); 

    //if (result.second) 

    //{ 

        //printf("m insert true %d,", thrd_current()); 

        //std:std::cout << "key=" << result.first->first << ",value=" << result.first->second << endl; 

    //} 

    //else 

    //{ 

       //printf("m insert fail %d\n", thrd_current()); 

    //} 

    return 0; 

} 


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

{ 

    thrd_t loc; 

    thrd_create(&loc, fun,0); 

    thrd_join(loc,0); 

    return 0; 

}


编译执行,注意看参数 -std=c11,-lgcc_s,证明是使用新标准


查看链接的动态库,是新的库


呜呼,无法编译成功,无法执行正常!!!


#/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread; 

#test_gcc4.9.c:4:21: 致命错误:threads.h:没有那个文件或目录 

 #include <threads.h> 

                     ^



编译中断。

标签:std,gcc,4.9,编译,include,local
From: https://blog.51cto.com/u_16131207/6443262

相关文章

  • Intel网卡编译安装步骤
    1、网卡厂家官网根据网卡型号搜索驱动。https://www.intel.cn/content/www/cn/zh/download-center/home.html2、查找对应的网卡驱动(下载对应的网卡驱动即可)3、将下载好的软件包上传到系统解压 大部分包都是以kernel开头,可以用命令yumlistinstalled|grepkernel来......
  • VS编译 error C2001: 常量中有换行符 中文无法通过编译
    VS编译errorC2001:常量中有换行符中文无法通过编译只有部分中文会提示,并且有时报错又时不错。2种解决方案:不用中文程序中添加system("chcp65001");使用UTF-8字符编码,且在高级保存选项中选择unicode(utf-8带签名)......
  • Qt之MQTT编译(一)
    一、MQTT简介MQTT(MessageQueuingTelemetryTransport)是一种轻量级的、发布-订阅模式的消息传输协议。它最初是为低带宽和不稳定网络环境设计的,以支持物联网(IoT)设备之间的高效通信。MQTT的工作方式基于发布-订阅模型,其中包含两个角色:发布者(Publisher)和订阅者(Subscriber)。发......
  • 【解决问题】libevent 编译时报错 Makefile:1708: test/.deps/test_regress-tinytest.
    1开发环境linux版本:统信UOS1030(可以认为是特殊的ubuntu)开发语言:C++2报错现象截图:报错语句:make:进入目录“/home/depend/libevent-2.1.11-stable”Makefile:1708:test/.deps/test_regress-tinytest.Po:没有那个文件或目录make:***没有规则可制作目标“te......
  • AI编译器CINN v.s TVM 中CodeGen 源码解读
    如下的技术点梳理仅以「日常优化工作」为牵引点,涉及哪个模块,就具体去看哪个模块的代码。一、CINN框架CINN中CodeGen之后的代码编译主要交给了Compiler类来负责。核心的函数主要是:Build(ir::Module&,string&code)Lookup(string&fn_name)classCompilerfinal{publ......
  • 云服务器glibc编译需要多久实测
    前言很多情况下CentOS自带的glibc版本不够用。而glibc编译速度短时间内完成不了,特别是对初次编译的折腾玩家来说未知的恐惧不小。今日偶然需要编译一次glibc2.18,顺便写个文章。笔者第一次编译glibc大概时七八年前了,当时就比较好奇,在编译的时候搜索 glibc编译需要多久 ,通过互联网......
  • 常用编译命令
    1.通过g++命令编译多文件并生成程序g++-gmain.cppsecond.cpp-omain.exe该方法有个明显的缺点,就是在-g后面需要列出所有需要编译的cpp文件,如果文件比较多,用起来就比较麻烦,而且每次编译都需要完整的命令。2.通过配置vscode使用g++编译首先给vscode安装c/c++|c/c++exten......
  • 程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
    (编译与链接)前言每当我们运行一段代码时,编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件(.exe),有了这个可执行文件,便可以执行我们写的程序了。那么编译器对代码的编译以及生成可执行程序的过程是怎样的呢?这个问题便是本文章将要探讨的。程序的环境在A......
  • CentOS 6.9 python3.10 numpy 安装使用 - gcc 升级
    踩坑记录程序写好了,使用了pandas,放在服务器上,运行报错:Originalerrorwas:/lib64/libgcc_s.so.1:version`GCC_4.8.0'notfound(requiredby/usr/local/lib/python3.10/site-packages/numpy/core/../../numpy.libs/libgfortran-040039e1.so.5.0.0)可以看到是导入numpy......
  • 统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
    前言  上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。<br>统信UOS系统版本  系统版本:  Qt源码下载  参考博文《获取下载Qt安装包,Qt源码全国网址备忘录(不用注册Qt账户,即可下载各版本Qt安装包和Qt源......