(1)预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)
gcc -E -o hello.i hello.c //预处理(preprocessing)
gcc -S -o hello.s hello.i //编译(compilation)
gcc -c -o hello.o hello.s //汇编(assembly)
gcc -o hello hello.o //链接(linking)
(2)编译器调试
gcc -o hello hello.c -v //查看编译的具体流程
(2)静态链接
1)gcc -o hello hello.c -static // 静态链接
(3)库
1)动态库:
生成动态库:
gcc -shared -o libsub.so sub.o sub2.o sub3.o //可以使用多个.o生成动态库
gcc -o test main.o -lsub -L /libsub.so/所在目录/
使用动态库:
libsub.so放到Ubuntu的/lib目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a //声明动态库目录
2)静态库:
生成静态库:
ar crs libsub.a sub.o sub2.o sub3.o(可以使用多个.o生成静态库)
gcc -o test main.o libsub.a (如果.a不在当前目录下,需要指定它的绝对或相对路径)
使用静态库:
不需要把静态库libsub.a放到板子上
(4)其他用法:
1)其他用法
(1)警告选项:gcc -Wall -c main.c //警告选项
(2)调试选项:-g
(3)优化选项:-O或-O1(较少优化)、-O2(常用)、-O3(更多优化)、-O0(不优化)
2)其他少用用法:
gcc -E main.c // 查看预处理结果,比如头文件是哪个
gcc -E -dM main.c > 1.txt // 把所有的宏展开,存在1.txt里
gcc -Wp,-MD,abc.dep -c -o main.o main.c // 生成依赖文件abc.dep,后面Makefile会用
echo 'main(){}'| gcc -E -v - // 它会列出头文件目录、库目录(LIBRARY_PATH)
gcc -v -nostartfiles -o test main.o sub.o //不链接系统标准启动文件,而标准库文件仍然正常使用
gcc -v -nostdlib -o test main.o sub.o //不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器
gcc -L. -o test main.o -lsub //用-Ldir选项将当前目录加入搜索路径
注意:
详细可参见 韦东山手册,较详细,有一定参考价值
参考:韦东山Linux教程
标签:GCC,libsub,gcc,链接,编译器,test,main,hello From: https://www.cnblogs.com/charlie12345/p/17681066.html