【发布时间】:2020-03-13 10:58:23
【问题描述】:
使用 CMake 和 gcc/clang 编译器我想从这个文件 (Registrator.cpp) 创建一个共享库:
#include ...
namespace
{
struct Registrator
{
Registrator()
{
...
}
~Registrator()
{
...
}
} g_registrator [[gnu::used, gnu::visibility("default")]];
} // namespace
此对象未在其他任何地方使用。它的职责仅仅是在它的(解)构建过程中做一些事情。
当定义为:
add_library(${libname} OBJECT Registrator.cpp)
这是一种防止链接器优化此 TU 的方法,就像在 OBJECT 情况下,所有源都进入最终可执行文件。
但是,我也希望能够将其用作SHARED 库。在以下情况下:
add_library(${libname} SHARED Registrator.cpp)
该库根本没有链接,不幸的是gnu::visibility("default") 并没有完全删除它。
有什么方法可以实现吗?提前感谢您的帮助。
干杯:)
【问题讨论】: