G++/GCC参数

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. 例子用法:gcc -E hello.c > pianoapan.txt   gcc -E hello.c | more  慢慢看吧,一个hello word 也要与处理成800行的代码
  • -S 只激活预处理和编译,就是指把文件编译成为汇编代码。例子用法 gcc -S hello.c他将生成.s的汇编代码,你可以用文本编辑器察看
  • -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件。例子用法: gcc -c hello.c 他将生成.o的obj文件
  • -o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out
  • -l(小写L) 需要链接的库名称。即链接库文件去掉lib前缀和.so后的部分。如libev.so就是 -lev;libace.so就是 -lace,如果库文件放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find-lxxx”,也就是链接程序ld在那3个目录里找不到。
  • -L 这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。
  • -I(大写i) include头文件的搜索路径。当有此选项时,优先搜索此路径下的头文件。然后按照#include后面是””还是<>来决定是优先在当前目录搜索还是优先在系统目录搜索。默认头文件的路径为当前目录./ 和系统目录 /usr/include /usr/local/include
  • -g 增加调试信息。
  • -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
  • -imacros file 将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中
  • -Dmacro 相当于C语言中的#define macro
  • -Dmacro=defn 相当于C语言中的#define macro=defn
  • -Umacro 相当于C语言中的#undef macro -undef 取消对任何非标准宏的定义
  • -w   不生成任何警告信息。
  • -Wall  生成所有警告信息。
  • -static   此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.
  • -shared   编译成动态链接库。通常用在建立共享库时。 需要配合参数-fPIC使用。

某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须使用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址不无关代码(Position Independent Code (PIC))。注意:linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。转自gcc的静态库和动态库

    原文作者:wiseAaron
    原文地址: https://www.jianshu.com/p/40ac8313eb7f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞