我正在编译 ngspice。它的 configure.ac 将 -fvisibility=hidden 添加到所有编译步骤,不仅在生成共享库的“代码模型”期间。
如果在编译标准可执行文件期间添加 -fvisibility=hidden 是否存在风险?
对于标准可执行文件,通常不需要任何可见符号,除了main
. 但是,main
如果您使用-fvisibility=hidden
.
例外情况是当您的程序在运行时使用 加载插件库时dlopen()
,这些插件希望能够调用主程序中的函数。您的插件将无法找到所需的符号。
不,它只会在外部符号上添加一个属性,并且当链接器看到它正在制作可执行文件时,该属性将被链接器忽略(除非您正在使用-rdynamic
/ -Wl,--export-dynamic
)。另一方面,可能会损害性能的是编译,-fpic/-fPIC
因为这会使您的代码变慢一点。-fpic/-fPIC
对于可执行文件来说是不必要的,除非它们是与位置无关的可执行文件 (PIE)。