gcc学习笔记

gcc常用选项(预处理,编译,汇编,链接)
-o 产生目标(.i,.o,.s,可执行文件等)
-c 通知gcc取消链接,即编译源码后生成目标文件(.o文件)
-E 只运行C预处理器(生成.i文件)
-S 生成.s文件
-Wall 使gcc对源文件的代码有问题的地方发出警告
-Idir 将dir目录加入搜索头文件的目录路径
-Ldir 将dir目录加入搜索库的目录路径
-llib 链接lib库
-g 在目标文件中嵌入调试信息


gcc -E hello.c -o hello.i(预处理)
gcc -S hello.i -o hello.s(编译)
gcc -c hello.s -o hello.o(汇编)
gcc hello.o -o hello(链接)
gcc hello.c -o hello(直接编译链接成可执行目标文件)

gcc -c hello.c 或者 gcc -c hello.c -o hello.o(编译生成可重定位目标文件)


gcc编译多文件
一次性编译 gcc hello_fn.c main.c -o newhello
独立编译   gcc -Wall -c main.c -o main.o
gcc -Wall -c hello_fn.c -o hello_fn.o
gcc -Wall main.o hello_fn.o -o newhello



动态库和静态库
链接一个数学函数库 libm.a libm.so
gcc -Wall main.c -o main -lm

生成静态库
hello_fn.h hello_fn.c main.c
gcc -Wall hello_fn.c -o hello_fn.o
ar rcs libhello.a hello_fn.o
ar是gnu归档工具,rcs表示(replace and creat)
示例:gcc -Wall -L. -I. main.c -o main -lhello或者gcc -Wall main.c libhello.a -o main
(-Ldir  库文件的搜索路径  -Idir 头文件的搜索路径)
生成共享库
shared:表示生成共享库格式
fPIC: 产生位置无关码(如果不指定这个,将只能在指定位置使用共享库)
库名规则:libxxx.so
示例:gcc -shared -fPIC hello.o -o libhello.so或者gcc main.o -o main -L. -lhello
(-Ldir  库文件的搜索路径  -Idir 头文件的搜索路径)

  当路径中同时存在 .so  和 .a 库文件时  自动优先选择动态库链接


可以将.so文件拷贝到系统共享库路径下,一般为/usr/lib
也可以更改 LD_LIBRARY_PATH :vi ~/.bash_profile  (作用于当前用户)
ldconfig :配置ld.so.conf,ldconfig命令更新ld.so.cache: vi /etc/ld.so.conf(作用于全局,所有用户有效)
ldd 命令 可以查询可执行文件链接了哪些库

你可能感兴趣的:(gcc学习笔记)