-fvisibility参数
时间: 2023-07-08 07:45:08 浏览: 188
`-fvisibility`是 GCC 和 Clang 编译器的选项之一,用于控制符号的可见性。
当编译一个库时,库中的符号,如函数、变量等,可以被其他程序访问和使用。但是,一些符号可能是库的内部实现细节,不应该被其他程序使用。如果不加特殊处理,这些符号也会被编译器暴露出来,从而增加了库被攻击的风险。
`-fvisibility`选项可以控制编译器生成的符号的可见性。它有三个取值:
- `default`:编译器将根据平台的默认规则来设置符号可见性。
- `hidden`:将符号的可见性设置为隐藏,只有库内部可以访问和使用这些符号。
- `protected`:将符号设置为受保护的,只有库内部和派生类可以访问和使用这些符号。
在使用 `-fvisibility` 选项时,需要在代码中使用 `__attribute__((visibility("hidden")))` 或 `__attribute__((visibility("protected")))` 标记来具体控制符号的可见性。
相关问题
-fvisibility=hidden
-fvisibility=hidden是一个编译选项,它可以将动态库中的符号隐藏起来,只有被显式声明为可见的符号才会被导出。这个选项可以提高动态库的安全性和稳定性,因为它可以防止动态库中的符号被意外地修改或者被其他程序调用。同时,它也可以减小动态库的大小,因为只有需要导出的符号才会被包含在动态库中。
C++ -fvisibility==hidden 在cmake中怎么使用
在 CMake 中使用 `-fvisibility=hidden` 参数可以通过在 `CMAKE_CXX_FLAGS` 变量中添加该参数来实现。可以在 `CMakeLists.txt` 文件中添加以下内容:
```
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
```
这样在编译时就会自动加上 `-fvisibility=hidden` 参数,从而实现符号的隐藏。当然,也可以根据不同的编译器使用不同的参数,例如对于 GCC 编译器,可以使用 `-fvisibility=hidden` 参数,而对于 Clang 编译器,可以使用 `-fvisibility=hidden -fvisibility-inlines-hidden` 参数。可以根据具体的情况选择合适的参数。
阅读全文