Я пишу библиотеку, которая должна зависеть от библиотек, которые в настоящее время не компилируются с поддержкой нового стандарта. Я хотел бы скомпилировать библиотеку, которая должна зависеть от этих библиотек с std = С++ 0x. Есть ли проблемы с этим?
Любые проблемы с микшированием библиотек с и без std = С++ 0x
Ответ 1
Если вы смешиваете библиотеки, скомпилированные с разными параметрами компилятора, вы должны убедиться, что ABI для типов данных в интерфейсе одинаковый. Некоторые типы данных (например, std::string
) имеют разные интерфейсы и требования между С++ 03 и С++ 0x, поэтому интерфейсы, которые их используют, должны быть осторожны.
Если ваши интерфейсы используют только встроенные типы и ваши собственные классы, и они сами не используют стандартные классы библиотек, все должно быть в порядке. В противном случае вам нужно будет проверить конкретное подмножество, которое вы используете.
Ответ 2
Простым ответом является отсутствие, если поставщик явно не гарантирует его (и даже тогда). Практически говоря, весь связанный код должен использовать одну и ту же стандартную библиотеку и скомпилироваться с той же версией компилятора, используя те же параметры. Есть способы обойти это, по крайней мере, для динамически связанных библиотек, но они работают только в том случае, если интерфейс между библиотеками является чисто C, и вы делаете специальные шаги при связывании (специальные параметры с dlopen
--- ни одна библиотека не использует std::string
в VС++ pre-version 10 и т.д.). В противном случае вы ищете проблемы.