При всей шумихе вокруг проектов с открытым исходным кодом, почему до сих пор нет сильного стандарта, который позволяет вам создавать переносимый код (я имею в виду C/C++, а не Java или C#)
Каждый вроде сам готовит суп.
Есть даже сторонние библиотеки, например Apache Portable Runtime.





Я думаю, что главная причина того, что нет единой библиотеки, с которой можно было бы согласиться, заключается в том, что требования у всех разные. Когда вы хотите обернуть системные библиотеки, вам часто нужно делать некоторые предположения о том, какими будут варианты использования, если только вы не хотите сделать оболочку огромной и с которой невозможно работать. Я думаю, что это может быть основной причиной того, что нет единой общей кроссплатформенной среды выполнения.
Для графического интерфейса причина может заключаться в том, что каждая платформа имеет свои собственные соглашения о пользовательском интерфейсе, вы не можете закодировать один графический интерфейс, который подходит всем, вы просто получите тот, который подходит только для одного или даже совсем не подходит.
Да, стандарта нет, но библиотеки вроде Qt и способствовать росту могут значительно облегчить вашу жизнь, если вы занимаетесь кросс-платформенной разработкой.
Существует множество библиотек, которые сами по себе упрощают кроссплатформенную разработку, но создание полной оболочки для всех платформ оказывается либо маленьким и сильно настраиваемым, либо массивным и совершенно нелепым.
Если довести до логического завершения, полная оболочка для всех аспектов операционной системы становится всей виртуальной средой выполнения. С таким же успехом вы можете создать свой собственный язык программирования.
АДАПТИВНАЯ коммуникационная среда (ACE) - отличная объектно-ориентированная среда, которая обеспечивает кроссплатформенную поддержку всех функций ОС низкого уровня, таких как многопоточность, сокеты, мьютексы и т. д. Она работает с безумным количеством компиляторов и операционных систем.
Если вы убедитесь, что он компилируется без ошибок как с GCC, так и с MS VC++, перенос в другое место не потребует дополнительных усилий.
wxwidgets - отличный уровень абстракции для виджетов с собственным графическим интерфейсом большинства оконных менеджеров.
C и C++ как языки являются языками стандартов. Если вы внимательно следуете их правилам при кодировании (это означает, что вы не используете расширения, зависящие от поставщика), ваш код должен быть переносимым, и вы должны иметь возможность скомпилировать его с помощью любого современного компилятора в любой ОС.
Однако C и C++ не имеют библиотеки GUI, такой как Java или C#, однако существуют некоторые бесплатные или коммерческие библиотеки GUI, которые позволят вам писать переносимые приложения с графическим интерфейсом.
Думаю, самые популярные - это Qt (коммерческий) и wxWidgets (FOSS). Согласно википедия, есть намного больше.
Также есть ускорение, хотя библиотека графического интерфейса способствовать росту не является действительно отличным дополнением к STL C++. Фактически, некоторые из расширенных библиотек будут добавлены в следующем стандарте C++.
Если вы успешно создадите что-то в Windows с помощью GCC и MSVC, у вас нет никакой гарантии, что это будет работать где-либо еще: endianness? (Intel - это прямой порядок байтов, многие другие - прямой порядок байтов) размер целого числа / указателя? (16/32/64 все обычные) API? (В Linux и UNIX нет WINAPI ...) И я уверен, что можно найти другие примеры. Готов поспорить, что создание программы MSVC на IBM z / OS может показаться очень "забавным" ...