Я создаю шаблон -только для библиотеки C++. Однако я также хотел бы предоставить «пустую» общую библиотеку, чтобы, контролируя SONAME, я мог принудительно перестраивать потребителей шаблонов всякий раз, когда шаблоны изменяются таким образом, что это приводит к несовместимости созданного шаблона ABI.
К сожалению, если у конкретного пользователя есть -Wl,--as-needed
в его LDFLAGS
, компоновщик удалит мою разделяемую библиотеку из NEEDED
, потому что скомпилированный исполняемый файл не запрашивает у него никаких символов. Как я могу гарантировать, что программа будет всегда компоноваться с моей библиотекой, предпочтительно не вводя ненужные фиктивные вызовы функций (или, если необходимо, делая их наименее обременительным )?
Изменить:как примечание, конкретный класс шаблона предоставляет статические методы, и обычно используются только эти статические методы. Таким образом, не стоит полагаться на что-либо, помещенное в конструктор, и мне бы очень хотелось избежать обременения всех методов каким-либо принудительным выполнением.
Вдохновленный @EmployedRussian , я достиг:
extern int dummy;
namespace
{
struct G
{
inline G()
{
dummy = 0;
}
};
static const G g;
}
Но, к сожалению, это выполняет назначение один раз для каждого модуля, включая заголовочный файл.