gcc命令参数

-Wsign-compare在有符号数和无符号数进行值比较时,有符号数可能在比较之前被转换为无符号数而导致结果错误。使用该选项会对这样的情况给出警告
-W和-Wall

开启所有警告,一般一起使用。

-O3

O是大写字母O, 开启编译优化,等级为三

-O0:无优化(默认)
-O和-O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化.在编译大型程序的时候会显著增加编译时内存的使用.
-O2: 包含-O1的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化.编译器不执行循环展开以及函数内联.此选项将增加编译时间和目标文件的执行性能.
-Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2优化选项.并且执行专门减小目标文件大小的优化选项.
-O3: 打开所有-O2的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize优化选项.

-D后面跟宏的名称
-Werror

把警告当作错误。出现任何警告就放弃编译。

-Werror=declaration-after-statement

-Werror=implicit-function-declaration #

-pipe使用管道代替临时文件。
-funroll-loops使得程序中的循环步骤完全展开
-std=gnu99-std= 选择C语言编译标准
-fPIC

-fPIC 选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code)

gcc -fPIC -shared func.c -o libfunc.so

-shared

$ gcc -fPIC -c func.c -o func.o
$ gcc -shared func.o -o libfunc.so

$ gcc -shared func.o -Bsymbolic libaaa.a -o libfunc.so

 

-Wl,-Bsymbolic 这个可以讲.a文件与.o文件一起打包

-fvisibility=

default

internal

hidden

protected

gcc的visibility是说,如果编译的时候用了这个属性,那么动态库的符号都是hidden的

隐藏函数符号动态链接库用

visibility用于设置动态链接库中函数的可见性

-Wl,-rpath

-Wl gcc的参数,表示编译器将后面的参数传递给链接器ld

-rpath
运行时库的搜索路径,运行链接时优先搜索-rpath,再去搜索LD_RUN_PATH

例子:-Wl,-rpath,./:../sdk/$(ARCH)  当前目录和sdk/arch目录

-soname

gcc -fPIC -Wall -Werror -fvisibility=hidden -shared -Wl,-soname,libabc.so.1.0 -o libabc.so.1.0 *.o
#生成共享库libabc.so.1.0 注意soname,能拥有兼容性的标准,同一系统多个同名库

 

readelf -d libabc.so
#查看libabc.so文件需要的共享库,以及自己的soname库名称

 strip进一步去除不需要的符号    去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小。

strip bin

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值