В каких именно библиотеках вы говорите?
Если вы говорите о стандартной библиотеке, то libstdc++
является частью gcc
. Всегда удобно связывать его независимо от того, какой стандарт вы компилируете. gcc
также принял решение о включении тегов ABI, чтобы они могли быть совместимыми с ABI с кодом, скомпилированным на C++ 11 и pre C++ 11. Смотрите действительно хороший ответ экземпляра TC на вопрос, я спросил здесь:
Is this simple C++ program using <locale> correct?
Если по
Как были C++ библиотеки из хранилища компилируется?
Вы имеете в виду, как скомпилированы все библиотеки C++ в репозиториях ubuntu, ответ может быть различным для каждого из них.
Например, если вы хотите использовать libfreetype6-dev
или libsdl2-dev
, это библиотеки C, они будут в порядке, чтобы ссылаться на какой бы стандарт вы ни нацелились.
Если вы хотите использовать libsilly-dev
от CEGUI, то есть библиотеки C++, и обычно лучше всего использовать тот же самый компилятор для вашего проекта и C++ lib, с которым вы связываетесь. Если он появляется в репозитории ubuntu, вы можете предположить, что он был построен по умолчанию с версией g++
, которую отправляет ubuntu. Если вам нужно использовать другой компилятор, вероятно, лучше всего создать C++ lib - в общем, C++ не стабилен ABI для разных компиляторов или даже для разных версий одного и того же компилятора.
Если вы хотите использовать скомпилированные библиотеки boost
, то, вероятно, лучше всего использовать библиотеки, которые они вам дают, и использовать компилятор, который они вам дают. Если вы используете только boost-only boost, тогда компилятор не имеет значения, так как вам не нужно связываться с чем-то, что они построили. Поэтому у вас больше гибкости в отношении компиляторов.
Часто, если вам нужно использовать библиотеки C++, лучше всего интегрировать их систему сборки в вашу, чтобы ее можно было легко перестроить из исходного кода, и вам нужно только настроить компилятор один раз. (По крайней мере, по моему опыту.) Это может сэкономить много времени, когда вы решите обновить компиляторы позже. Если вы используете cmake
, то это часто возможно, но иногда это может быть сложно, особенно если у вас много зависимостей на C++. Если вы не используете cmake
, ну, многие библиотеки используют cmake
, и это будет не так просто интегрировать их таким образом.cmake
все равно будет больно, так что это может быть не такая потеря.
'g ++ -v' покажет вам, как он был скомпилирован. – SurvivalMachine
AFAIK вы можете вызывать библиотеку C++ из кода C++ 11 и C++ 14, даже если библиотека не скомпилирована с C++ 11. – fstamour
C++ в основном совместим по этой причине, насколько мне известно. – Charles