eclipse等IDE 增加GCC 安全编译选项

    以前对于GCC的安全编译选项,一点都没有了解过,反正程序功能只要满足需求,也不会去关注是不是安全。但是这次公司的项目合作方对于安全这一块非常看重,姑且不说软硬件方面的加密,只说对于程序编译选项的要求,就有如下那么多。

    C语言需开启编译选项:

    -Wl -z relro -z now -Wl -z noexecstack -fPIC -fPIE -pie

    -fstack-protector-all/-fstack-protector-strong(二选1) -D_FORTIFY_SOURCE=2 -O2 -fvisibility=hidden -s(strip)(可选)

其他的几个选项都比较容易,只要在IDE的gcc 链接选项中加入对应的安全编译选项即可,具体每个选项的含义可以参考下面几个链接:

http://www.stxletto.com/posts/漫谈Linux系统安全缺陷缓解机制/

http://www.lenky.info/archives/2014/06/2412

 

    但是在添加了-fPIC -fPIE -pie这两个选项以后,程序死活编译不通过。最后发现,在用eclipse等IDE构建可执行程序时,-fPIC和-fPIE -pie要分开使用,-fPIC在gcc编译阶段使用,而-fPIE -pie是在gcc链接阶段使用,在eclipse配置中分别为编译和链接配置加上选项,程序终于能顺利编译了?

    理想很美好,但现实是残忍的,程序仍然无法成功编译通过,这次的错误原因的由于程序依赖了几个第三方开源静态库,但是加上了-fPIE后,无法直接使用静态库编译。这里有两种解决方式可以选择:第一种,将静态库替换为动态库即可;第二种,重新编译开源库,在./configure时加上CFLAGS=-fPIC选项。

你可能感兴趣的:(gcc,安全编译选项)