-4

Мне не удалось скомпилировать стандартную библиотеку gcc на C++ с VC++ и наоборот.Почему почти все стандартные библиотеки C++ не переносимы (в том числе и clang, gcc и vC++)?

Почему практически все стандартные библиотеки C++ не переносятся (в том числе clang, gcc и vC++)?

Я также пробовал STLport, однако он слишком стар для поддержки C++ 11.

Я пишу свой собственный мини-STL для встроенных систем, где я не могу использовать предоставленный компилятором STL из-за его непереносимости. Значит, мне все равно.

Есть ли реализация переносной стандартной библиотеки C++?

+0

Какие детали не удалось скомпилировать? Вы это проверили? Например, потоки C++ 11 должны быть реализованы для ОС. Файловый ввод-вывод также зависит от ОС. –

+0

'type_info' тесно связан с компилятором, даже для двух компиляторов, работающих в одной и той же системе. Как и 'numeric_limits', и, вероятно, большая часть раздела 18. –

+0

В прошлом были некоторые реализации кросс-компиляторов, по крайней мере, части стандартных библиотек, таких как SGI STL (считалось, что он был удален в 2000 году) и STLport (2008). Они слишком стары, чтобы быть полезными. Слишком много неприятностей смешивает ваш код с существующими библиотеками, созданными с собственной библиотекой компилятора, чтобы сделать его полезным (например, как вы можете передать 'std :: string' в библиотеку, если макет памяти или требуемое поведение для поддержания инвариантов отличаются ?). –

ответ

12

Часть работы стандартной библиотеки заключается в предоставлении переносных оболочек вокруг зависимых от платформы и зависящих от компилятора функций. Это не может быть полностью портативным.

Там также нет причин, почему он должен быть переносным. В этом нет необходимости. Он поставляется как часть инструментальной цепочки компилятора. Когда у вас есть компилятор, у вас также есть стандартная реализация библиотеки, которая работает с этим компилятором. Независимо от того, какой компилятор вы используете, вы уже имеете реализацию стандартной библиотеки.