我正在使用CMake的add_library命令构建一个共享库,如下所示:
当我使用“nm”检查这个库时,我发现一些符号被标记为全局可见(“T”),而其他符号仅在库内部可见(“t”)。我的问题是,为什么会这样?当我没有特别控制它时,什么确定了符号的可见性呢?
我问这个问题是因为我恰好将这个库链接到项目的另一部分时出现了未定义的引用错误,原因是我需要的符号显然只对库内部可见。因此,我想以某种方式将“t”更改为“T”。但是,由于我不知道什么导致它最初成为“t”,所以我认为首先应该了解一下。
所涉及的符号碰巧是模板函数的特化,因此默认可见性可能与模板有关?
add_library(mylibname OPTION SHARED SOURCES ${source_files} HEADERS ${header_files})
当我使用“nm”检查这个库时,我发现一些符号被标记为全局可见(“T”),而其他符号仅在库内部可见(“t”)。我的问题是,为什么会这样?当我没有特别控制它时,什么确定了符号的可见性呢?
我问这个问题是因为我恰好将这个库链接到项目的另一部分时出现了未定义的引用错误,原因是我需要的符号显然只对库内部可见。因此,我想以某种方式将“t”更改为“T”。但是,由于我不知道什么导致它最初成为“t”,所以我认为首先应该了解一下。
所涉及的符号碰巧是模板函数的特化,因此默认可见性可能与模板有关?