Принудительное связывание с общей библиотекой с помощью -Wl, --по мере необходимости -(, когда предоставляются только шаблоны)

Я создаю шаблон -только для библиотеки C++. Однако я также хотел бы предоставить «пустую» общую библиотеку, чтобы, контролируя SONAME, я мог принудительно перестраивать потребителей шаблонов всякий раз, когда шаблоны изменяются таким образом, что это приводит к несовместимости созданного шаблона ABI.

К сожалению, если у конкретного пользователя есть -Wl,--as-neededв его LDFLAGS, компоновщик удалит мою разделяемую библиотеку из NEEDED, потому что скомпилированный исполняемый файл не запрашивает у него никаких символов. Как я могу гарантировать, что программа будет всегда компоноваться с моей библиотекой, предпочтительно не вводя ненужные фиктивные вызовы функций (или, если необходимо, делая их наименее обременительным )?

Изменить:как примечание, конкретный класс шаблона предоставляет статические методы, и обычно используются только эти статические методы. Таким образом, не стоит полагаться на что-либо, помещенное в конструктор, и мне бы очень хотелось избежать обременения всех методов каким-либо принудительным выполнением.


Вдохновленный @EmployedRussian , я достиг:

extern int dummy;

namespace
{
    struct G
    {
        inline G()
        {
            dummy = 0;
        }
    };

    static const G g;
}

Но, к сожалению, это выполняет назначение один раз для каждого модуля, включая заголовочный файл.

8
задан Michał Górny 18 August 2012 в 16:07
поделиться