gcc g++ 编译链接常用参数的意义;

这两天维护公司工程的时候,发现很多大的项目在链接编译的时候都会加上很长的一段参数:

比如:-m32 -std=gnu++11 -g -Wall -Wextra -fpermissive -fextended-identifiers -Wno-unused-paramter -Wno-write-strings -D_init64=long\long -finstrument-functions -D_GNU_SOURCE -Wl,-export-dynamic -rdynamic -fprofile-arcs -ftest-coverage

因此就想吧一些常用的编译参数总结一下,方便以后查找;

-m32 生成32位机器的汇编代码;

-std=gnu++11  选择C语言编译标准,`c90',`c89',`c++0x'...;

-Wall 该选项意思是编译后显示所有警告;

-Wextra 检测更多的代码中的警告信息,比如if后面加分号,使用该参数可以报出警告;

-fpermissive 该选项会降低对代码检查的严格性,会将不一致代码的诊断从错误降级为警告;

-fextended-identifiers 允许字符中出现uncode字符\u \U;

-finstrument-functions 在每个函数的入口和出口处会各增加一个额外的hook函数的调用

  • void __cyg_profile_func_enter (void *this_fn, void *call_site);

  • void __cyg_profile_func_exit (void *this_fn, void *call_site);

-Wl statick  只能链接静态库,也就是说接在static后面的库都应该是静态库,实际编译的时候有可能是包含静态库和动态库两种情况,这时候就是应用Wl的时候;

-export-dynamic  就是这个选项让主程序内定义的全局函数对库函数可见;

-rdynamic 用来通知链接器将所有符号添加到动态符号表中

-fprofile-arcs  运行结束以后会生成一个xx.gcda文件,如果一个可执行文件带有“-fprofile-arcs”参数编译出来,并且运行过至少一次,就会生成。这个文件包含了程序基本块跳转的信息。接下来可以用gcov生成代码覆盖信息;

-ftest-coverage  编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ftest-coverage”参数,就会生成这个.gcno文件,它包含了程序块和行号等信息;

-fPIC 地址无关代码,

原创文章 7 获赞 3 访问量 949

猜你喜欢

转载自blog.csdn.net/w346665682/article/details/103323475
今日推荐