-
1 Gcc简介GUN Compiler Collection简称GCC,它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,一是支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),二是支持交叉编译(即在A平台上编译的程序是供平台B使用的)。GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。当前文档是文档适用于Arm-CentOS-7.5-64bit。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB40GB软件GCC9.1.0https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.xz3 软件移植3.1 环境准备OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传gcc-9.1.0.tar.xz源码包至服务器目录下下载地址:https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.xz 3.2 安装Gcc 1、 安装gcc软件 a. 上传自动安装脚本至服务器,如/opt目录下 (gcc_install.sh) b. 执行如下命令添加执行权限: chmod +x /opt/gcc_install.sh c. 执行如下命令安装gcc9.1.0 sh /opt/gcc_install.sh d. 提示gcc install seccess!表示安装成功4 软件运行4.1 验证执行安装完成后执行:gcc –v,如下则表示安装成功 5 参考信息https://developer.arm.com/tools-and-software/server-and-hpc/arm-architecture-tools/resources/porting-and-tuning/building-blast-with-arm-compiler/single-page
-
1 Gcc简介GUN Compiler Collection简称GCC,它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,一是支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),二是支持交叉编译(即在A平台上编译的程序是供平台B使用的)。GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。当前文档是文档适用于Arm-CentOS-7.5-64bit。2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB50GB软件GCC7.3 https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传gcc-7.3.0.tar.gz源码包至服务器目录下下载地址:https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz 3.2 安装Gcc 1、 如果当前服务器不能访问外网,请先配置本地yum源。 a. 上传以下脚本至要安装ActiveMQ的服务器上的任意目录,如/opt。(local_yum_install.sh) b. 执行如下命令添加执行权限: chmod +x /opt/local_yum_install.sh c. 执行如下命令安装配置本地yum源 sh /opt/local_yum_install.sh2、 安装gcc软件 a. 上传自动安装脚本至服务器,如/opt目录下 (gcc_install.sh) b. 执行如下命令添加执行权限: chmod +x /opt/gcc_install.sh c. 执行如下命令安装gcc7.3 sh /opt/gcc_install.sh d. 提示gcc install seccess!表示安装成功4 软件运行4.1 验证执行安装完成后执行:gcc –v,如下则表示安装成功 5 参考信息https://developer.arm.com/tools-and-software/server-and-hpc/arm-architecture-tools/resources/porting-and-tuning/building-blast-with-arm-compiler/single-page6 FAQ
-
1、简介gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。 类别:工具2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.7.1908Kernel4.18.0软件包 Gcc8.3.1 https://koji.fedoraproject.org/koji/buildinfo?buildID=13940003、组件编译安装下载Gcc9.1.0源码包并解压wget https://kojipkgs.fedoraproject.org//packages/gcc/8.3.1/5.fc29/src/gcc-8.3.1-5.fc29.src.rpm安装rpm源码包,安装后在 ~/rpmbuild 目录下rpm -ivh gcc-8.3.1-5.fc29.src.rpm安装依赖yum install -y yum install -y glibc-static zlib-devel gettext bison flex sharutils texinfo texinfo-tex systemtap-sdt-devel gmp-devel mpfr-devel libmpc-devel python2-devel python3-devel gcc-c++ elfutils-devel gcc-gnat doxygen graphviz texlive-collection-latex python-sphinx docbook5-style-xsl dblatex 解决 dejagnu,isl,isl-devel依赖wget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/d/dejagnu-1.6.1-4.fc29.noarch.rpmrpm -ivh dejagnu-1.6.1-4.fc29.noarch.rpmwget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/i/isl-0.16.1-7.fc29.aarch64.rpmrpm -ivh isl-0.16.1-7.fc29.aarch64.rpmwget http://rpmfind.net/linux/fedora/linux/releases/29/Everything/aarch64/os/Packages/i/isl-devel-0.16.1-7.fc29.aarch64.rpmrpm -ivh isl-devel-0.16.1-7.fc29.aarch64.rpm 编译rpmbuild -bb ~/rpmbuild/SPECS/gcc.spec 编译结果在 ~/rpmbuild/RPMS/ 目录下 5、系统配置 无6、测试安装#!/bin/bashREPO_PATH="/root/rpmbuild/RPMS/"yum install -y createrepoif [ $? -ne 0 ]; then echo "Failed to install createrepo" exit -1;ficreaterepo ${REPO_PATH}if [ $? -ne 0 ]; then echo "Failed to run createrepo" exit -1;ficat <<EOF > /etc/yum.repos.d/gcc8.3.1.repo[gcc8.3.1]name=gcc831baseurl=file://${REPO_PATH}enabled=1gpgcheck=0EOFyum repolistyum -y remove gcc gcc-c++yum -y install --enablerepo gcc8.3.1 gcc gcc-c++gcc --version 7、参考信息 无8、FAQ 无
-
摘要:本文主要基于LiteOS_Lab的开发,在在SW4STM32环境下对于STM32F429IGTx野火开发板的适配工作,希望对你有所帮助。1 环境准备参考网址:https://github.com/LiteOS/LiteOS_Lab/blob/iot_link/doc/Huawei_IoT_Link_SDK_IDE_Eclipse_Guide.md1.1 安装GCC编译器首先需要安装GCC编译器” GNU Arm Embedded Toolchain”,安装完毕务必将添加环境变量“Add path to environment variable”勾选上。 下载地址: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads1.2 安装jdk运行环境安装好jdk后,新建环境变量,并添加path路径。安装后可以windows+R,输入cmd进入terminal,输入java -version,查看版本以及安装成功与否。下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html1.3 安装make工具Make 工具用于build 工程,使用Makefile 编译工程。也可根据需要自行安装所需版本。版本:gnu-mcu-eclipse-build-tools-2.9-20170629-1013-win64-setup.exe下载地址: https://github.com/gnu-mcu-eclipse/windows-build-tools/releases/tag/v2.9-20170629-10131.4 安装Jlink 驱动程序版本:JLink_Windows_V632e.exe 下载地址如下:https://www.segger.com/downloads/jlink/#JLinkSoftwareAndDocumentationPack 1.5 安装Eclipse IDE 环境下载地址: https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases将下载的eclipse 直接解压即可完成安装。解压后,打开eclipse 目录,如图双击eclipse.exe 即可运行IDE 环境,建议将该应用程序创建桌面快捷方式,这样方便后续直接在桌面打开IDE环境。1.6 安装AC6环境下载最新版本v2.9,即可直接官网https://www.ac6-tools.com/downloads/SW4STM32/install_sw4stm32_win_32bits-v2.9.exe2 获取LiteOS源码下载LiteOS最新源码,并解压到指定文件夹。下载地址:https://github.com/LiteOS/LiteOS_Lab3工程创建与配置31创建工程在软件中,点击File → New → C project,开始创建工程,具体如下所示。图1自定义工程名字,选择创建空项目,以及Ac6 STM32 MCU GCC。图2之后选择开发板,选择对应系列到具体开发板,具体如下所示,可以看到同一系列的一类开发板。图3如果找不到,点击新建开发板。本文使用的是STM32F429IGTx的野火开发板,采用创建新开发板方式。 图4根据需要创建开发板并选择具体的调试接口,本文使用JTAG,注意所选MCU名称。图5接下来点击OK,可以看见开发板的详细信息,包括系列名,以及RAM、ROM的起始地址以及具体大小。图6由于后续将采用LiteOS的启动文件,此处勾选不生成启动文件。图7生成的具体目录情况如下所示,除了Includes文件夹,其余文件夹为空。图83.2 导入LiteOS源码之后在Src文件夹下,新建目录,具体操作如下所示,命名为Huawei_Lab_IoT_link,同时将其链接到LiteOS源码所在文件夹。图9图10图11点击Finish完成创建,打开Src下的Huawei_Lab_IoT_link文件夹,可以看见完整的工程目录。图123.3配置工程之后点击工具栏中Project下的Properties选项,选择C/C++ build,选择修改Build directory,将makefile generation 勾选取消,选择已有的Makefile文件,选择为LiteOS源码下D:\LiteOS\Huawei_IoT_link\LiteOS_Lab-iot_link\targets\STM32F429IGTx_FIRE\GCC文件(上述为我的链接文件路径)。图13 图14图15之后clean项目,然后选择工具栏的project选项中的build project当出现如下所示的内容时,说明make成功。图16图173.4配置调试器 接下来安装调试器,点击工具栏中Help下的Install New SoftWare选项,安装调试器,输入网址http://gnuarmeclipse.sourceforge.net/updates 稍等几秒钟会出现图中所示的调试器,可根据需要选择,本文项目中必选的是Jlink调试器。图18 图19 图20 图21接下来新建Jlink调试器,,进行如图所示的配置,选择debugger选项中添加设备名称为stm32f429IG。勾选Disable auto build。图22图23之后在Executable中选择,所安装的GNU目录项的bin文件夹下的arm-none-eabi-gdb.exe文件。之后在Common选项下选择Shared file。之后编译项目即可。图24
-
编译project 下source 代码时报错,gcc: error: unrecognized command line option '-V',对GCC版本有要求?
-
问题背景: 我想用自己的数据集训练一个目标检测网络。 华为提供了fasterrcnn模型( https://github.com/Ascend/models/tree/master/computer_vision/object_detect/faster_rcnn ),根据描述,这个模型是基于py-faster-rcnn构建的,这里面可能有一些官方caffe不支持的算子,所以官方版的caffe是不是不能直接使用?(我直接用官方版caffe替代py-faster-rcnn中的caffe后测试demo运行不通过。)因此我也打算使用这个版本来训练我的网络。问题: 但是在配置环境的过程中,我发现由于长久没有更新,这个py-faster-rcnn中的caffe原生支持的环境是cudnn v4,对应cuda7.0,而cuda7.0只能装在Ubuntu14,我的环境是Ubuntu16。所以我根据该教程在Ubuntu16.04上安装了cuda7.0,在这个过程中将gcc和g++的版本改为了4.8。结果在编译的过程中出现了.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::Message::InitializationErrorString() const' ...等错误。 我寻找了一些解决办法,但是都行不通。(在此之前,我的环境是cuda9,我已经成功编译过官方最新的caffe。)这时,我又将之前编译好的官方caffe清除(make clean)掉,然后再次编译,此时却编译失败了,与编译py-faster-rcnn中的caffe的错误是同一种类型。然后我又将gcc和g++的版本切换回原来的5.4,然后再编译就通过了,所以我推测失败的原因应该是gcc版本问题。 接着我安装了cuda8.0和cudnn v5,gcc和g++保持为5.4,但是此时编译仍然出错:./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_0000286f_00000000-5_adadelta_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/adadelta_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/adadelta_solver.o] Error 1 make: *** Waiting for unfinished jobs.... nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_0000287b_00000000-5_adagrad_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/adagrad_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/adagrad_solver.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_00002874_00000000-5_rmsprop_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/rmsprop_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/rmsprop_solver.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_00002892_00000000-5_sgd_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/sgd_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/sgd_solver.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_0000287a_00000000-5_nesterov_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/nesterov_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/nesterov_solver.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_00002899_00000000-5_adam_solver.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/solvers/adam_solver.o' failed make: *** [.build_release/cuda/src/caffe/solvers/adam_solver.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_0000288b_00000000-5_im2col.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/util/im2col.o' failed make: *** [.build_release/cuda/src/caffe/util/im2col.o] Error 1 nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning). ./include/caffe/util/cudnn.hpp(126): error: argument of type "int" is incompatible with parameter of type "cudnnNanPropagation_t" ./include/caffe/util/cudnn.hpp(126): error: too few arguments in function call 2 errors detected in the compilation of "/tmp/tmpxft_000028ca_00000000-5_math_functions.cpp4.ii". Makefile:604: recipe for target '.build_release/cuda/src/caffe/util/math_functions.o' failed make: *** [.build_release/cuda/src/caffe/util/math_functions.o] Error 1这个应该还是因为cudnn版本不符合py-faster-rcnn中的caffe所要求的版本导致的。总结:所以我想请问的是,华为官方是使用py-faster-rcnn中的caffe来训练fasterrcnn的吗?如果是的话,那开发环境是怎样的呢?有没有对代码做什么修改呢?
-
Kunpeng920处理器支持流水线指令集,在编译过程中可以使用-mtune=tsv110编译选项来对比,增加流水线编译选项具体方法:l使用gcc9.1版本,在编译选项中分别带-mtune=tsv110和不带-mtune=tsv110两种场景下,分别编译XZ压缩工具,并使用编译好的XZ工具对gcc-9.1.0.tar.gz(119M)继续进行压缩,统计压缩和解压时间在xz开源组件编译后的目标文件夹下,执行如下指令可以计算压缩和解压时间,以及展示压缩后的文件大小等信息ltime ./xz -1 gcc-9.1.0.tar.gz;du -ksh gcc-9.1.0.tar.gz*;ls -l gcc-9.1.0.tar.gz*;read PAUSe;time ./unxz gcc-9.1.0.tar.gz*1.在xz目录下,分别执行./configure --prefix=/home/third-release/xz-no-tsv110 make -j 96 make install和./configure --prefix=/home/third-release/xz-tsv110 CPPFLAGS="-mtune=tsv110" CFLAGS="-mtune=tsv110"make -j 96make install2.分别在编译后生成的目标路径/home/third/release/xz-tsv110和/home/third-release/xz-no-tsv110下执行time ./xz -1 gcc-9.1.0.tar.gz;du -ksh gcc-9.1.0.tar.gz*;ls -l gcc-9.1.0.tar.gz*;read PAUSe;time ./unxz gcc-9.1.0.tar.gz* 然后分别计算五次求平均值,从对比来看,增加了-mtune=tsv110之后,以xz压缩工具为例,压缩时间有约10%的降低,解压时间则差别不大
-
1、简介交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。本指南主要内容为在非ARM架构服务器环境下搭建ARM的GCC编译环境,编译基于ARM架构的应用软件。交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的GCC相同。搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出ARM架构下Linux系统所需的操作系统、应用程序等,然后再上传到ARM服务器执行。2、环境类别版本配置备注ARM测试服务器CentOS7.5ARM通用计算增强型 | rc3.xlarge.4 | 4vCPUs | 14GB华为云官网正在公测x86编译服务器CentOS7.52vCPUs|4GB|s3.large.2 1.在华为云官网购买https://www.huaweicloud.com/product/ecs.html2.本地服务器部署Centos7.5x86编译服务器Ubuntu16.042vCPUs|4GB|s3.large.21.在华为云官网购买https://www.huaweicloud.com/product/ecs.html2.本地服务器部署Ubuntu16.04交叉编译器arm-linux-gcc 5.5.0https://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz3、交叉编译器安装(x86服务器)3.1.安装标准的C开发环境执行以下命令:Ubuntu: apt-get install build-essentialCentOS: yum groupinstall Development Tools3.2.在/usr/local下建立名为ARM-toolchain的文件夹mkdir /usr/local/ARM-toolchain3.3 下载gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz 可以通过wget的形式下载cd /usr/local/ARM-toolchainwget https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz 也可以从网页上下载后上传到/usr/local/ARM-toolchain目录下。交叉编译工具链的地址在https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/ 下载gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz下载完成后,解压tar包tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz3.4.配置环境变量修改配置文件,在配置文件的最后一行加入路径配置:Ubuntu:vim /etc/bash.bashrc # Add ARM toolschain pathPATH= /usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin:"${PATH}"CentOS: vim /etc/profile# Add ARM toolschain pathexport PATH=$PATH:/usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin3.5.环境变量生效与测试执行以下命令:Ubuntu:source /etc/bash.bashrc aarch64-linux-gnu-gcc -v执行上面的命令,显示arm-linux-gnueabi-gcc -v信息和版本CentOS: source /etc/profile aarch64-linux-gnu-gcc -v执行上面的命令,显示arm-linux-gnueabi-gcc -v信息和版本4、测试4.1.在x86服务器交叉编译1、创建hello.c执行:vim hello.c#include <stdio.h>int main(void){ printf("hello linux\n"); return 0;}2.交叉编译执行:aarch64-linux-gnu-gcc -o arm-hello hello.c4.2.测试执行1、在x86服务器上测试执行:chmod +x arm-hello执行:./arm-hello页面显示:-bash: ./arm-hello: cannot execute binary file 2. 拷贝执行文件至ARM服务器执行:chmod +x arm-hello执行:./arm-hello页面显示:hello linux 5、参考信息 交叉编译指导: https://releases.linaro.org/components/toolchain/binaries/https://blog.csdn.net/mars1743/article/details/20492285 6、FAQ 待补充
-
1. 简介GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。鲲鹏服务器CentOS7.5中默认GCC版本为4.8.5,很多情况下需要升级。本指南描述了GCC升级到5.4.0的过程,可供相关人士参考。类别:编译器2. 部署环境Packet NameVersionCentOSCentOS 7.5 with ARMGCC5.4.07.3.03. 安装部署 3.1 编译升级GCC由于服务器Centos7.5默认安装的GCC版本较低,在某些场景下需要进行升级GCC,版本信息如下:[root@ecs-arm-felix-free01 ~]# gcc --versiongcc (GCC) 4.8.5去官网下载http://ftp.gnu.org/gnu/gcc/下载GCC 5.4.0的源码压缩包解压安装 解压gcc-5.4.0.tar.gz[root@ecs-arm-felix-free01 ~]# tar -xvf gcc-5.4.0.tar.gz下载安装依赖,下载安装gcc需要的三个依赖[root@ecs-arm-felix-free01 ~]# yum -y install bzip2 wget # 下载依赖需要使用把bzip2和wget两个命令[root@ecs-arm-felix-free01 ~]# cd gcc-5.4.0/[root@ecs-arm-felix-free01 ~]# ./contrib/download_prerequisites # 在解压根目录中执行依赖下载完成后,编译更新gcc版本 [root@ecs-arm-felix-free01 ~]# cd ../ && mkdir gcc-build-5.4.0 && cd gcc-build-5.4.0 #执行命令前位于gcc-5.4.0目录下# 执行configure[root@ecs-arm-felix-free01 ~]# ../gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib# 执行编译,make时间1-2小时或更久[root@ecs-arm-felix-free01 ~]# make -j8 #-j8意味8核并行编译;[root@ecs-arm-felix-free01 ~]# make install #执行安装备注:如果执行过程遇到configure: error: C++ preprocessor "/lib/cpp" fails sanity check,执行[root@ecs-arm-felix-free01 ~]# yum install glibc-headers [root@ecs-arm-felix-free01 ~]# yum install gcc-c++验证是否更新生效[root@ecs-arm-felix-free01 ~]# gcc -versiongcc (GCC) 5.4.0生成的动态库替换老版本gcc的动态库。[root@ecs-arm-felix-free01 ~]# cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64 [root@ecs-arm-felix-free01 ~]# cd /lib64 & cp libstdc++.so.6 libstdc++.so.6.old[root@ecs-arm-felix-free01 ~]# ln -s libstdc++.so.6.0.21 libstdc++.so.6#执行命令查看最新GLIBCXX_3.4.21[root@ecs-arm-felix-free01 ~]# strings /lib64/libstdc++.so.6 | grep GLIBC3.2 参考信息[1] GCC升级版本:https://www.linuxidc.com/Linux/2018-11/155395.htm
-
1、简介 GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。官方链接:http://gcc.gnu.org/ 类别:编译器2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Gcc4.8.5 3、依赖安装无4、组件编译安装在yum源中查找gcc列表yum list|grep gcc在yum源直接安装gccyum install gcc5、系统配置无6、测试测试内容:gcc是否能正常使用1)vim test.ctest.c编辑内容为:#include <stdio.h>int main(int argc,char * argv[]){puts("Hello Arm!");return 0;}2)gcc test.c -o test3)./test测试结果:7、参考信息官方文档:https://gcc.gnu.org/onlinedocs/ 8、FAQ无
-
1. 简介GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。GCC 编译器通常以 Linux 命令的形式在终端(Shell)中使用。本指南描述了在ARM64,CentOS7.5的环境下升级GCC的过程,可供相关人士参考。2. 部署环境Packet NameVersionCentOSCentOS 7.5 with ArmGCC5.4.07.3.03. 安装部署 3.1 编译升级GCC由于服务器Centos7.5默认安装的GCC版本较低,在某些场景下需要进行升级GCC,版本信息如下:[root@ecs-arm-felix-free01 ~]# gcc --versiongcc (GCC) 4.8.5去官网下载http://ftp.gnu.org/gnu/gcc/下载GCC 5.4.0的源码压缩包解压安装 解压gcc-5.4.0.tar.gz[root@ecs-arm-felix-free01 ~]# tar -xvf gcc-5.4.0.tar.gz下载安装依赖,下载安装gcc需要的三个依赖[root@ecs-arm-felix-free01 ~]# yum -y install bzip2 wget # 下载依赖需要使用把bzip2和wget两个命令[root@ecs-arm-felix-free01 ~]# cd gcc-5.4.0/[root@ecs-arm-felix-free01 ~]# ./contrib/download_prerequisites # 在解压根目录中执行依赖下载完成后,编译更新gcc版本 [root@ecs-arm-felix-free01 ~]# cd ../ && mkdir gcc-build-5.4.0 && cd gcc-build-5.4.0 #执行命令前位于gcc-5.4.0目录下# 执行configure[root@ecs-arm-felix-free01 ~]# ../gcc-5.4.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib# 执行编译,make时间1-2小时或更久[root@ecs-arm-felix-free01 ~]# make -j8 #-j8意味8核并行编译;[root@ecs-arm-felix-free01 ~]# make install #执行安装备注:如果执行过程遇到configure: error: C++ preprocessor "/lib/cpp" fails sanity check,执行[root@ecs-arm-felix-free01 ~]# yum install glibc-headers [root@ecs-arm-felix-free01 ~]# yum install gcc-c++验证是否更新生效[root@ecs-arm-felix-free01 ~]# gcc -versiongcc (GCC) 5.4.0生成的动态库替换老版本gcc的动态库。[root@ecs-arm-felix-free01 ~]# cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64 [root@ecs-arm-felix-free01 ~]# cd /lib64 & cp libstdc++.so.6 libstdc++.so.6.old[root@ecs-arm-felix-free01 ~]# ln -s libstdc++.so.6.0.21 libstdc++.so.6#执行命令查看最新GLIBCXX_3.4.21[root@ecs-arm-felix-free01 ~]# strings /lib64/libstdc++.so.6 | grep GLIBC 3.2 参考信息 [1] GCC升级版本:https://www.linuxidc.com/Linux/2018-11/155395.htm
-
GCC官网编译选项网址:https://gcc.gnu.org/onlinedocs/gcc/Option-Index.html#Option-Index也可以去gcc源码中查询通用编译选项在gcc/common.opt中各个后端独有的在config/XXX/XXX.opt;例如gcc/config/arm/arm.opt查看各个优化默认的编译选项:gcc -c -Q -O3 --help=optimizersgcc -c -Q -O2 --help=optimizersgcc -c -Q -Os --help=optimizers
-
gcc 语言编译全过程:预处理->编译->汇编->链接一、GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out我们来看一下经典入门程序"Hello World!"# vi hello.c#include <stdlib.h>#include <stdio.h>void main(void){printf("hello world!\r\n");}用gcc编译成执行程序。#gcc hello.c该命令将hello.c直接生成最终二进制可执行程序a.out这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。如何要指定最终二进制可执行程序名,那么用-o选项来指定名称。比如需要生成执行程序hello.exe那么#gcc hello.c -o hello.exe二、GCC的命令剖析--四步走从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接现在我们就用GCC的命令选项来逐个剖析GCC过程。1)预处理(Pre-processing)在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。用法:#gcc -E hello.c -o hello.i 作用:将hello.c预处理输出hello.i文件。[root]# gcc -E hello.c -o hello.i[root]# lshello.c hello.i[root]# vi hello.i# 1 "hello.c"# 1 "<built-in>"# 1 "<command line>"# 1 "hello.c"# 1 "/usr/include/stdlib.h" 1 3# 25 "/usr/include/stdlib.h" 3# 1 "/usr/include/features.h" 1 3# 291 "/usr/include/features.h" 3# 1 "/usr/include/sys/cdefs.h" 1 3# 292 "/usr/include/features.h" 2 3# 314 "/usr/include/features.h" 3# 1 "/usr/include/gnu/stubs.h" 1 3# 315 "/usr/include/features.h" 2 3# 26 "/usr/include/stdlib.h" 2 3# 3 "hello.c" 2void main(void){printf("hello world!\r\n");}2)编译阶段(Compiling)第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。选项 -S用法:[root]# gcc –S hello.i –o hello.s 作用:将预处理输出文件hello.i汇编成hello.s文件。[root@richard hello-gcc]# lshello.c hello.i hello.s如下为hello.s汇编代码[root@richard hello-gcc]# vi hello.s.file "hello.c".section .rodata.LC0:.string "hello world!\r\n".text.globl main.type main,@functionmain:pushl %ebpmovl %esp, %ebpsubl $8, %espandl $-16, %espmovl $0, %eaxsubl %eax, %espsubl $12, %esppushl $.LC0call printfaddl $16, %espmovl $0, %eaxleaveret.Lfe1:.size main,.Lfe1-main.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"3)汇编阶段(Assembling)汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.选项 -c用法:[root]# gcc –c hello.s –o hello.o 作用:将汇编输出文件test.s编译输出test.o文件。[root]# gcc -c hello.s -o hello.o[root]# lshello.c hello.i hello.o hello.s4)链接阶段(Link)在成功编译之后,就进入了链接阶段。无选项链接用法:[root]# gcc hello.o –o hello.exe 作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。[root]# lshello.c hello.exe hello.i hello.o hello.s运行该可执行文件,出现正确的结果如下。[root@localhost Gcc]# ./helloHello World!在这里涉及到一个重要的概念:函数库。读者可以重新查看这个小程序,在这个程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径”/usr/lib”下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数”printf” 了,而这也就是链接的作用。你可以用ldd命令查看动态库加载情况:[root]# ldd hello.exelibc.so.6 => /lib/tls/libc.so.6 (0x42000000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。
-
GCC安全编译选项具体可以参考这份博客:https://www.cnblogs.com/fengbeihong/p/3641384.html
-
Short Table of Contents1 Programming Languages Supported by GCC2 Language Standards Supported by GCC3 GCC Command Options4 C Implementation-Defined Behavior5 C++ Implementation-Defined Behavior6 Extensions to the C Language Family7 Extensions to the C++ Language8 GNU Objective-C Features9 Binary Compatibility10 gcov—a Test Coverage Program11 gcov-tool—an Offline Gcda Profile Processing Tool12 gcov-dump—an Offline Gcda and Gcno Profile Dump Tool13 Known Causes of Trouble with GCC14 Reporting Bugs15 How To Get Help with GCC16 Contributing to GCC DevelopmentFunding Free SoftwareThe GNU Project and GNU/LinuxGNU General Public LicenseGNU Free Documentation LicenseContributors to GCCOption IndexKeyword Index
上滑加载中
推荐直播
-
全面解析华为云EI-API服务:理论基础与实践应用指南
2024/11/29 周五 18:20-20:20
Alex 华为云学堂技术讲师
本期直播给大家带来的是理论与实践结合的华为云EI-API的服务介绍。从“主要功能,应用场景,实践案例,调用流程”四个维度来深入解析“语音交互API,文字识别API,自然语言处理API,图像识别API及图像搜索API”五大场景下API服务,同时结合实验,来加深开发者对API服务理解。
回顾中 -
企业员工、应届毕业生、在读研究生共探项目实践
2024/12/02 周一 19:00-21:00
姚圣伟 在职软件工程师 昇腾社区优秀开发者 华为云云享专家 HCDG天津地区发起人
大神带你一键了解和掌握LeakyReLU自定义算子在ONNX网络中应用和优化技巧,在线分享如何入门,以及在工作中如何结合实际项目进行学习
即将直播 -
昇腾云服务ModelArts深度解析:理论基础与实践应用指南
2024/12/03 周二 14:30-16:30
Alex 华为云学堂技术讲师
如何快速创建和部署模型,管理全周期AI工作流呢?本期直播聚焦华为昇腾云服务ModelArts一站式AI开发平台功能介绍,同时结合基于ModelArts 的实践性实验,帮助开发者从理论到实验更好地理解和使用ModelArts。
去报名
热门标签