Используя компиляторы 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")
не совсем обрезает ее.
Есть ли способ достичь этого? Заранее спасибо за помощь.
Приветствия:)