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=**可以指定运行时的搜索路径