Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在带有gcc的CMake中正确设置可见性属性?_Gcc_Cmake - Fatal编程技术网

如何在带有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)