3

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

如果在编译标准可执行文件期间添加 -fvisibility=hidden 是否存在风险?

4

2 回答 2

2

对于标准可执行文件,通常不需要任何可见符号,除了main. 但是,main如果您使用-fvisibility=hidden.

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

于 2018-10-21T10:51:07.563 回答
1

不,它只会在外部符号上添加一个属性,并且当链接器看到它正在制作可执行文件时,该属性将被链接器忽略(除非您正在使用-rdynamic/ -Wl,--export-dynamic)。另一方面,可能会损害性能的是编译,-fpic/-fPIC因为这会使您的代码变慢一点。-fpic/-fPIC对于可执行文件来说是不必要的,除非它们是与位置无关的可执行文件 (PIE)。

于 2018-10-21T10:59:34.357 回答