我尝试了几种方法来正确设置我的库中的可见性。例如:
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