Linux编译器之GCC,GNU Compiler Collection(GCC)是一个强大的编译器套件,用于在类Unix操作系统(如Linux)上编译程序,它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等,GCC是开源的,可以在各种平台上使用,包括Windows和macOS,本文将介绍GCC的基本用法和一些高级特性。
一、安装GCC
在大多数Linux发行版中,GCC已经预装,如果你的系统没有预装GCC,可以使用包管理器进行安装,以下是在不同Linux发行版中安装GCC的方法:
1、在基于Debian的系统(如Ubuntu)中,打开终端,输入以下命令:
sudo apt-get update sudo apt-get install build-essential
2、在基于RPM的系统(如Fedora、CentOS)中,打开终端,输入以下命令:
sudo yum groupinstall "Development Tools"
3、在Arch Linux及其衍生版中,打开终端,输入以下命令:
sudo pacman -S base-devel
4、在macOS上,可以使用Homebrew进行安装:
brew install gcc
二、GCC基本用法
1、编译C程序:
gcc -o output_file input_file.c
output_file
是编译后的可执行文件名,`input_file.c`是源代码文件名,要编译一个名为`hello.c`的C程序,可以输入:
gcc -o hello hello.c
2、编译C++程序:
g++ -o output_file input_file.cpp
3、链接库文件:
在编译时,可以使用-l
选项链接库文件,要链接名为`libexample.so`的库文件,可以输入:
gcc -o output_file input_file.c -lexample
4、查看编译选项:
在编译时,可以使用-Wall
选项启用所有警告信息。
```bash
gcc -o output_file input_file.c -Wall -I/usr/include/c++/9/ -std=c++11 -L/usr/lib/x86_64-linux-gnu -lpthread -lm -lcurl -lrt -ldl -lutil -lgmpxx -lgmp -lcrypto -fPIC -Wall -Wextra -pedantic -O2 -g3 -pipe -DLAPACKE_HAS_INTEL_ACML=1 -DLAPACKE_HAS_BLAS=1 -DLAPACKE_HAS_LAPACK=1 -DLAPACKE_HAS_MPFR=1 -DLAPACKE_HAS_MPFI=1 -DLAPACKE_HAS_WEAK=1 -fopenmp -march=native -mtune=native -m64 -mabi=elpem64drv -mcmodel=medium -malign-jumps=false -mindirect-branch=false -mavx256fintrin=false -mavx512fintrin=false -mfma=false --param lzma1e-default=0 --param max-inline=$((3 * ${PARALLEL})) --param inline-max-depth=$MAX_INLINE_DEPTH --param large-function-growth=$LARGE_FUNCTION_GROWTH --param small-function-growth=$SMALL_FUNCTION_GROWTH --param big-merge=$BIG_MERGE --param class-keys=$CLASS_KEYS --param inline-huge-function=$INLINE_HUGE_FUNCTION --param stack protectors=$STACK_PROTECTORS --param threaded=$THREADED --param default-fpmath=$DEFAULT_FPMATHEMATICS --param realpathpath=$REALPATHPATH --param defaultvalfmt=$DEFAULTVALFMT --param defaultloopvecsize=$DEFAULTLOOPEVSIZE --param defaultendianness=$DEFAULTENDIANNESS --param defaulttextops=$DEFAULTTEXTOPS --param defaultwidecf=\${WIDECF} --param defaultquadcf=${QUADCF} --param defaultprec=\${PREC} --param defaultrealprec=\${REALPREC} --param defaultlinpack=\${LINPACK} --param defaultuse-\${USE} --param useallproposals=${USEALLPROPOSALS} --param usealltargetcpus=${USEALLTARGETCPUS} --param usearch=\${USEARCH} --param usefpu=${USEFPU} --param usefastmath=\${USEFASTMATH} --param usefastrelaxedmath=\${USEFASTRELAXEDMATH} --param usespecsigs=\${USESPECSIGS} --param usefastmath=\${USEFASTMATH} --param usefastrelaxedmath=${USEFASTRELAXEDMATH} --param usespecsigs=\${USESPECSIGS} --param usearch=\${USEARCH} --param usefpu=${USEFPU} --enable-languages=c,c++,fortran,objc,objcpp,java,ada,lto,llvm,ada95,ada95gpu,ada95tk,ada95extended,ada95noext,ada95noconformance,ada95nofpic,ada95nofstrictfpu
--asmjitargs=\"\${ASMJITFLAGS}\"
--llvmflags=\"\${LLVMFLAGS}\"
--llvmlinkopts=\"\${LLVMLINKFLAGS}\"
--ldflags=\"\${LDFLAGS}\"
--rtlibdir=\"\${RTLIBDIR}\"
--plugindir=\"\${PLUGINDIR}"
--systemdir=\"${SYSTEMDIR}\"
--enable-languages=c,c++,fortran
--disable-nls
--program-transformation=none
--savetemps
--verbose
--debuginfo
--debuglineformat=DS
--debuginfo=yes
--debuginfo=framerel
--debuginfo=internal
--debuginfo=prefix=/tmp/gcc/debug/i686/7zProgName
--debuginfo=suffix=
--debuginfo=linkonce
--debuginfo=version
--debuglevel=3
--target=i686
--with-arch=native
--with-fpu=vme
--with-float=hard
--with-mode=thumb
--with-fmode=thumb
--with!asmparsers
--without!asmparsers
--with!builtins
--without!builtins
--without!headers
--enable!threads
--enable!exceptions
--enable!multiarch
--enable!multilib
--enable!tls
--enable!checksums
[...]" > output_file.out # Replace [...] with additional options if needed (e.g. `[...]' '--sysroot='/usr') # Use the same file name as the input file for the output file (e.g. `hello.c' -> 'hello.out') # Add any necessary libraries to the link command (e.g. `gcc main.o libexample.so -o main' -> 'gcc main.o libexample.so linkerflags'") # Run the compiled program (e.g. `./main' or `echo $?') # Check the exit status of the program (e.g. `if [ $? != 0 ]; then echo "Error"; exit; else echo "Success"; exit;fi') # Add more error handling and logging as needed # Note: The above commands are just examples and may need to be modified depending on your specific requirements and environment # Read more about GCC options at -Options.html#Common-Options
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/99838.html