gcc是一套工具链。
1将源码编译成.o 只编译不链接。
gcc -c output.o source.c
2执行链接
gcc -o output source.c obj1.o obj2.o obj3.o
gcc -o output source.o obj1.o obj2.o obj3.o
也可以用ld执行链接过程。但是必须都指定
ld -o output obj1.o obj2.o obj3.o -e entrypoint
-e指定入口点。实际上默认是_start
3将两个.o文件合并成一个.o
ld -r one.o another.o -o output.o
-r表示生成可重定位的.o文件
4由.o文件产生.a文件 使用ar命令
ar rc liboutput.a obj1 obj2 obj3 obj4
合并两个.a文件.方式是先解开再产生
ar x lib1.a
ar x lib2.a
ar rc liboutpu.a *.o
5使用.o文件产生 so
gcc -o liboutput.so -shared -fPIC obj1.o obj2.o obj3.o
-fPIC指定编译的是位置独立的代码.主要是使得多个实例能够共享一个so文件。减少内存占有量。
6链接时使用 *.a和链接时使用*.so文件
-L指定动态库的路径 -l指定动态库的名称
比如
gcc -o main -L./ -ltest
表示 去连接当前目录下的 libtest.so文件
静态库的话只需要末尾加上*.a文件
gcc -o main libtest.a
表示使用静态库libtest.a文件