- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 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/
我对 C++ 可见性属性有疑问。我已阅读 http://gcc.gnu.org/wiki/Visibility但我不太明白它是如何工作的。 我想在我拥有的一些共享库中隐藏可见性。我相信这意味着符号被隐
我有一个共享库项目,它是由 4 个静态库 ( .a ) 和一个对象 ( .o ) 文件构建的。我正在尝试添加 -fvisibility=hidden选项将输出中的符号限制为仅我在源中使用 __attr
我正在构建一个共享对象 (.so),并将其链接到第三方静态库。在理想情况下,该第三方库应该使用 -fvisibility=hidden 进行编译 - 但事实并非如此。 有没有办法避免在动态库导出的全局
我正在构建一个启用了 GCC_INLINES_ARE_PRIVATE_EXTERN 和 GCC_SYMBOLS_PRIVATE_EXTERN 的项目,因为我正在使用预先构建的带有这些标志的静态库。 但
我有一个 A 类: class A { public: A() {} virtual ~A() {} void Func(); }; 和另一个使用 A 的 M 类。我想创建 libM
我有一个共享库,它应该只导出一个标有 __attribute__ ((visibility ("default"))) 的函数。 .它还与另一个静态库 (fftw) 链接,并且 #include 前面
我是想看看我的理解是否正确。 inline 是对 C++ 编译器的建议,只要它认为更好,就替换一个函数,因此从库外部调用标记为内联的过程不可靠,它们在逻辑上应该被隐藏默认情况下,阻止其他人调用它们作为
我们面临与 OpenSSL 静态链接的共享库的问题。该库用于 Apache HTTP Server。虽然我们已经使用 OpenSSL 静态编译了我们的共享库,但它使用的是系统 OpenSSL 库路径,
我用 C++ 开发了跨平台软件。据我所知,Linux .so默认导出所有符号,通过 "gcc -fvisibility=hidden" 我可以将所有导出的符号设置为隐藏,然后设置 __attribut
我需要使用 -fvisibility=hidden 编译 openssl 代码以隐藏大量符号,然后在 Xcode 中使用。使用下面的 GitHub 链接。我可以获得 libssl.a 和 libcry
来自 https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Optimize-Options.html#index-fsemantic-interposition
我正在尝试在 Cygwin 的测试程序中使用 Phonon 库。 CMake 用于构建: find_package(Phonon REQUIRED) 但它会生成以下错误消息: $ make -- Fo
这是我在 Mac OS X 上使用 clang++ 时遇到的问题的缩小版本。经过认真编辑,以更好地反射(reflect)真正的问题(描述问题的第一次尝试没有表现出问题)。 失败 我有一个 C++ 软件
我是一名优秀的程序员,十分优秀!