将gcc“ -fvisibility = hidden”应用于标准C编译的可执行文件时是否会受到伤害

时间:2018-10-21 08:39:03

标签: c gcc cflags

我正在编译ngspice。它的configure.ac不仅在生成共享库的“代码模型”期间,还将-fvisibility = hidden添加到所有编译步骤中。

在标准可执行文件的编译过程中添加-fvisibility = hidden是否有风险?

2 个答案:

答案 0 :(得分:2)

对于标准可执行文件,通常不需要main以外的任何可见符号。但是,如果您使用main进行编译,似乎编译器足够聪明,可以使-fvisibility=hidden可见。

例外情况是使您的程序在运行时使用dlopen()加载插件库时,这些插件希望能够在主程序中调用函数。这样您的插件将无法找到所需的符号。

答案 1 :(得分:1)

不。它只是在外部符号上拍了一个属性,当链接器看到它正在生成可执行文件时,该属性将被链接器忽略(除非您正在使用-rdynamic / -Wl,--export-dynamic)。另一方面,可能会影响性能的是使用-fpic/-fPIC进行编译,因为这会降低您的代码速度。 -fpic/-fPIC对于可执行文件是不必要的,除非它们是与位置无关的可执行文件(PIE)。