gpt4 book ai didi

gcc - 控制共享库的导出符号时,CMake 相当于 "gcc -fvisibility=hidden"的是什么?

转载 作者:行者123 更新时间:2023-12-03 07:38:34 31 4
gpt4 key购买 nike

我用 C++ 开发了跨平台软件。据我所知,Linux .so默认导出所有符号,通过 "gcc -fvisibility=hidden" 我可以将所有导出的符号设置为隐藏,然后设置 __attribute__(visibility("default")) 用于我想要导出的类和函数,这样我就可以控制我想要导出的内容。

我的问题是,使用CMake,我该如何做“gcc -fvisibility=hidden”控制的工作?

最佳答案

您应该使用当前的 CMake 版本和 <LANG>_VISIBILITY_PRESET,而不是直接设置编译器标志。属性代替。这样您就可以避免 CMakeList 中的编译器细节并提高跨平台适用性(避免诸如支持 GCC 而不是 Clang 之类的错误)。

即,如果您使用 C++,您可以调用set(CMAKE_CXX_VISIBILITY_PRESEThidden) 以全局设置属性,或 set_target_properties(MyTarget PROPERTIES CXX_VISIBILITY_PRESEThidden) 将设置限制为特定库或可执行目标。如果您使用 C,只需在上述命令中将 CXX 替换为 C。您可能还想调查VISIBLITY_INLINES_HIDDEN还有属性(property)。

GENERATE_EXPORT_HEADER 的文档包括一些与这两个属性相关的更多提示和示例。

关于gcc - 控制共享库的导出符号时,CMake 相当于 "gcc -fvisibility=hidden"的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080869/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com