我正在编译ngspice。它的configure.ac不仅在生成共享库的“代码模型”期间,还将-fvisibility = hidden添加到所有编译步骤中。
在标准可执行文件的编译过程中添加-fvisibility = hidden是否有风险?
答案 0 :(得分:2)
对于标准可执行文件,通常不需要main
以外的任何可见符号。但是,如果您使用main
进行编译,似乎编译器足够聪明,可以使-fvisibility=hidden
可见。
例外情况是使您的程序在运行时使用dlopen()
加载插件库时,这些插件希望能够在主程序中调用函数。这样您的插件将无法找到所需的符号。
答案 1 :(得分:1)
不。它只是在外部符号上拍了一个属性,当链接器看到它正在生成可执行文件时,该属性将被链接器忽略(除非您正在使用-rdynamic
/ -Wl,--export-dynamic
)。另一方面,可能会影响性能的是使用-fpic/-fPIC
进行编译,因为这会降低您的代码速度。 -fpic/-fPIC
对于可执行文件是不必要的,除非它们是与位置无关的可执行文件(PIE)。