Подтвердить что ты не робот

Любые проблемы с микшированием библиотек с и без std = С++ 0x

Я пишу библиотеку, которая должна зависеть от библиотек, которые в настоящее время не компилируются с поддержкой нового стандарта. Я хотел бы скомпилировать библиотеку, которая должна зависеть от этих библиотек с std = С++ 0x. Есть ли проблемы с этим?

4b9b3361

Ответ 1

Если вы смешиваете библиотеки, скомпилированные с разными параметрами компилятора, вы должны убедиться, что ABI для типов данных в интерфейсе одинаковый. Некоторые типы данных (например, std::string) имеют разные интерфейсы и требования между С++ 03 и С++ 0x, поэтому интерфейсы, которые их используют, должны быть осторожны.

Если ваши интерфейсы используют только встроенные типы и ваши собственные классы, и они сами не используют стандартные классы библиотек, все должно быть в порядке. В противном случае вам нужно будет проверить конкретное подмножество, которое вы используете.

Ответ 2

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