如何在带有gcc的CMake中正确设置可见性属性?
我尝试了几个选项来正确设置库中的可见性。比如:如何在带有gcc的CMake中正确设置可见性属性?,gcc,cmake,Gcc,Cmake,我尝试了几个选项来正确设置库中的可见性。比如: target_compile_options(MY_LIB PRIVATE "-fvisibility=hidden") set_target_properties(MY_LIB PROPERTIES C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) set_target_properties(MY_LIB PROPERTIES CXX_VISIBILITY_PRESET hidden
target_compile_options(MY_LIB PRIVATE "-fvisibility=hidden")
set_target_properties(MY_LIB PROPERTIES C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1)
set_target_properties(MY_LIB PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1)
或
两个都不起作用。我有我想在块内公开的特定函数集
#pragma GCC visibilty push(default)
void thisShouldBeTheOnlyThingVisible(void) {
...
}
#pragma GCC visibilty pop
但是,如果我运行不同的工具,比如objdump或readelf,我不仅看到了所有不应该列出的内部函数,还看到了文件名和非静态变量名。我不介意在调试模式下,但在发行版中,它不应该存在
除了那些特殊的函数之外,我想要隐藏的所有东西,正确的过程是什么
谢谢
我想你在寻找:
add_library(MY_LIB ${MY_SOURCES})
set_property(TARGET MY_LIB PROPERTY C_VISIBILITY_PRESET hidden)
set_property(TARGET MY_LIB PROPERTY VISIBILITY_INLINES_HIDDEN ON)
至少,从cmake 3.14.4开始
通过查看CMake的测试确定:
add_library(MY_LIB ${MY_SOURCES})
set_property(TARGET MY_LIB PROPERTY C_VISIBILITY_PRESET hidden)
set_property(TARGET MY_LIB PROPERTY VISIBILITY_INLINES_HIDDEN ON)