Любые проблемы со смешиванием библиотек с и без std = c ++ 0x - PullRequest
12 голосов
/ 27 июня 2011

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

Ответы [ 2 ]

11 голосов
/ 27 июня 2011

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

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

3 голосов
/ 27 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...