компиляция разделяемой библиотеки (старый стандарт) с разделяемой библиотекой c ++ 11

Я пытаюсь скомпилировать общую библиотеку (A), которая использует другую общую библиотеку (B).

Библиотека A должна быть скомпилирована без добавления -std=c++11 вариант g ++ (потому что есть тонны кода, и некоторые вещи, как std::make_pair не будет работать со стандартом 11 года).

Для использования библиотеки B, первый просто #include "B.h" в одном из его файлов, а затем скомпилировать с -I/path/inc -L/path/lib -lB,

Библиотека B состоит из набора функций внутри namespace Bи включает в себя некоторые определения классов в своем собственном пространстве имен (B :: internals). Отношение между функциями и классом является статическим указателем в глобальной области видимости, инициализированным __attribute__((constructor)),

Проблема в том, что этот класс (B :: internals :: classB) определяет некоторые std::mutex частные атрибуты и, следуя цепочке включения:
libA -> libB -> B::internals -> std::mutex,
делает это при компиляции libA без -std=c++11 стандартная компиляция не удалась.

Однако libA никогда не использует B::internals, поэтому не должно быть проблем смешивания обеих библиотек. Кроме того, если функции c ++ 11 являются частными атрибутами, почему они не скрыты в libA ?. Есть ли какой-то шаблон для скрытия B::internals в libA?

0

Решение

Существует язык C ++ для сокрытия деталей реализации, называемый Pimpl.

Кроме того, библиотека, скомпилированная с различными параметрами C ++, не должна предоставлять std контейнеры в его интерфейсе, потому что их расположение отличается в разных версиях C ++.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector