Как используют библиотеки с разными версиями языка в одном проекте?

77
25 июня 2021, 23:50

Собственно, вопрос в заголовке. На сколько я понял, разные версии языка вводят разные ограничения и предоставляют разные возможности. Я не программирую на c++ и мне интересно, возможно ли использовать например библиотеки написанные на c++98 в проекте c++17? И если да, то с какими ограничениями? Как это работает? Не могу найти информацию об этом в гугле

Answer 1

В C++ все хорошо с обратной совместимостью как между стандартами языка, так и с совместимостью с С. (Все плохо с совместимостью компиляторов, и stl разных поставщиков между собой.)

C++ библиотеки, как правило, бывают либо open-sources (и поставляются в исходниках), либо коммерческие (с закрытыми исходниками), поставляемые в виде .lib/.dll/.so.

Для open-sources обозначение версии языка - суть обозначение минимальной версии с помощью которой ее можно собрать. Т.е. если библиотеку нужно использовать в проекте, то просто собираете библиотеку и свой код одним компилятором (с одними и теми же настройками). Пример таких библиотек: boost.org

Коммерческие библиотеки, бывают двух видов: С-библиотеки, либо C++ библиотеки. С-библиотеки хороши тем, что в отличии от C++, для них был принят стандартный ABI (application binary interface), и все его придерживаются. т.е. независимо от версии компилятора, скорее всего, вы сможете подключить библиотеку к своему проекту. Причем не только к проекту на любом C++, но и к проекту на pascal или fortran. Пример такой библиотеки: MKL.

С++-библиотеки позволяют предоставить более удобный интерфейс, но заставляют поставщика привязываться к конкретным компиляторам (под windows). Часто, поставщик предоставляет бинарные файлы для нескольких популярных компиляторов, или может прислать отдельно бинарный файл для "вашего любимого" компилятора за отдельные деньги.

Под linux, в отличии от windows, С++ABI принят если не де-юре, то де-факто. Но разные версий stl и самих линуксов, сводят это преимуществено на нет.

READ ALSO
Быстрый поиск процесса по имени

Быстрый поиск процесса по имени

Необходимо максимально быстро найти процесс по названию исполняемого файлаПоиск выполняется из 32 битного приложения, искомый процесс может...

87
Подсчёт кол-во символов в PlainTextEdit

Подсчёт кол-во символов в PlainTextEdit

Как подсчитать кол-во символов введённых в поле QPlainTextEdit? Я еще новичок в теме QT и в С++ в целом, но кое что уже умею, иду на новые высоты)

69
Как сверстать блок с изогнутой линией?

Как сверстать блок с изогнутой линией?

Никак не получается заверстать вот такой блок

78
Как получить численное значение из input?

Как получить численное значение из input?

Как с помощью JS получить цифры с каждого input и с селектора чтобы в JS например я имел 3 переменные содержат в себе 50 из input = text, 5 c radio, и 60 из селектора...

224