-Wsign-compare | 在有符号数和无符号数进行值比较时,有符号数可能在比较之前被转换为无符号数而导致结果错误。使用该选项会对这样的情况给出警告 |
-W和-Wall | 开启所有警告,一般一起使用。 |
-O3 | O是大写字母O, 开启编译优化,等级为三 -O0:无优化(默认) |
-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 -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 例子:-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
readelf -d libabc.so |
strip进一步去除不需要的符号 去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小。
strip bin