gcc常用编译选项(头文件路径,库路径,运行动态库链接的目标文件)

常用编译选项

-E -c -o 

-l 链接库文件(可以是 静态库 或 动态库)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
怎么编译多个文件

gcc -o test main.c sub.c -v

查看编译过程,先编译成.s文件,再汇编成.o文件,最后链接成可执行文件

 多个源文件编译时,一个源文件被修改了,再跟上面编译一样编译的话,把没有修改的源文件也编译了,其实没有被修改的是不用编译的

 改善上面的编译方法,先编译,再链接

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

********************************************************************************************************************************************************************************************************************

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 注意下面区别

1、<> 去工具链里默认指定目录寻找,找不到的话不会去当前目录找

2、" " 当前工作目录找,找不到去系统默认目录也就是工具链目录里面找

也就是说" "是万能的,只是会有顺序问题

-------------------------------扩展

  编译error:no such file or directory解决办法如下:

  1、可以添加自己目录:

    -I 指定头文件目录

      例如:gcc -c -o main.o main.c -I ./ -v

   2、或者把头文件放到工具链指定目录里

   执行命令gcc -o test main.c,出现undefined reference to 'sub_fun'错误,解决如下

      gcc -o test main.c sub.c   还可把sub.c做成库(往下看)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
制作使用动态库

注意:上面编译动态库时可能会出错,解决如下

  gcc -fPIC -o sub.o sub.c

  gcc -shared -o libsub.so sub.o

编译两种方式:

 

 

 运行2种方法:

  1、库文件放到系统目录下

   2、指定目录

制作使用静态库

   静态库以.a结尾

   main.o文件和libsub.a文件会打包在一起 gcc -o test main.o -lsub -L ../

很有用的选项

 

 echo "main(){} " | gcc -E -v -

总结

 运行时另一种方法, /etc/ld.so.conf 加入生成的库目录,然后ldconfig  /etc/ld.so.conf

 

posted @ 2021-12-29 20:37  我爱茜茜公主  阅读(277)  评论(0)    收藏  举报