Gcc

 

gcc和g++简介

gcc和g++是跨平台的编译工具.如果可以熟练掌握命令行的编译,在面对新的项目时会很有优势.

常用命令

单文件编译

    gcc hello.c

默认输出和代码文件名相同的可执行文件(windows下为exe文件)

    gcc hello.c -o out

输出名字为out的可执行文件

    gcc hello.c -o out -g

生成可以使用gdb调试的可执行文件

    gcc hello.c -c

生成.o文件

    gcc hello.c -o hello -O2

对源码进行优化,2表示级别,还有00和01(默认)

    gcc hello.c -o hello -DHELLO -DWORLD=10
```sh
相当于在hello.c的开头添加:

## 链接相关
### 静态库
静态链接库是后缀名为.a的文件,由多个后缀为.o的目标文件组成.
```sh
    gcc -c addvec.c multvec.c
    ar rcs libvector.a addvec.o multvec.o
gcc -c可以生成.o文件,使用ar可以生成.a文件
    
    gcc -c main2.c
    gcc  main2.o ./libvector.a -static -o p2

使用-static来链接main.o和.a库

动态库

动态链接库是后缀名为.so的文件.

    gcc -shared -fPIC -o libvector.so addvec.c multvec.c
    gcc -o p2 main2.c ./libvector.so

-fPIC表示生成和位置无关的代码

路径

-L/home/jelly/mylib

-L表示编译的过程中寻找库依赖的路径(用来链接),默认的库路径包括:/lib、/usr/lib、/usr/local/lib、/usr/lib64

    g++ -I ../include -Wl,-rpath=../util/ -lwang -L../util/  client.c -o client

-Wl,rpath=**可以指定运行时的搜索路径