编译链接

过程:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
1. gcc -E -o test.i test.c
2. gcc -S -o test.s test.i
3. gcc -c -o test.o test.s
4. gcc -o test test.o
其它选项:
警告信息
gcc -pedantic -Wall -o test.o test.c
在编译程序时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译
编译包含头文件:
gcc -c -I ./include -o test.o test.c (-I 添加编译时搜索头文件的路径)
链接动态库:
gcc -L ./lib -ls1 -o test test.o 
-L(dir)  在`-L选项的搜索路径列表中添加dir目录
-l(library)   连接名为library的库文件.连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`lib(s1).so'.连接器会 当做文件名得到准确说明一样引用这个文件.

链接静态库:
gcc –L ./slib –static –lsa -shared -ls -o test test.o
-static  在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.

-shared  生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项.

静态库链接时搜索路径顺序:
1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:
1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

可以参考:
http://www.cnblogs.com/skynet/p/3372855.html

你可能感兴趣的:(编译)