【发布时间】:2018-10-19 01:13:40
【问题描述】:
我尝试了几个选项来正确设置我的库中的可见性。喜欢:
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)
或
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
两者都不起作用。我有我想要在块内公开的特定功能
#pragma GCC visibilty push(default)
void thisShouldBeTheOnlyThingVisible(void) {
...
}
#pragma GCC visibilty pop
但是,如果我运行不同的工具,例如 objdump 或 readelf,我不仅会看到所有不应列出的内部函数,还会看到文件名称和非静态变量名称。我不介意 debug 模式,但在 release 中,它不应该存在。
除了那些特殊功能之外,隐藏我想要隐藏的所有内容的正确流程是什么?
谢谢
W
【问题讨论】: