2018-01-10
Проект qkc является подпроектом проекта quark. Он реализует интерфейс POSIX для Windows, что позволяет компилировать исходный код C для Linux в среде Visual Studio и генерировать локальные библиотеки. Проект эффективен только в VS и имеет лишь простое перенаправление в Linux.
Цели проектов qkc и mingw схожи: они оба предназначены для компиляции исходного кода C для Linux на платформе Windows и создания исполняемых файлов, обеспечивая миграцию проектов с Linux на Windows. Язык C имеет долгую историю, и в экосистеме Linux существует множество выдающихся работ. Перенос этих проектов на Windows является перспективной идеей.
Mingw имитирует Linux на платформе Windows, предоставляя эмуляцию на уровне операционной системы. В среде mingw пользовательский опыт похож на работу в Linux, но он не полностью использует преимущества Windows. В то же время проект qkc представляет собой библиотеку, подобную libc, которая предназначена для компиляции кода Linux в среде VS. Она не предоставляет пользовательского опыта Linux.
В mingw используются компилятор GCC и отладчик GDB, в то время как qkc функционирует как библиотека в VS, аналогичная библиотеке libc для Windows. Это позволяет в полной мере оценить преимущества VS в компиляции и отладке. Кроме того, исходный код, написанный с использованием этой библиотеки, может быть без проблем скомпилирован в Linux.
VS реализовал часть стандартного интерфейса C, но каждая версия имеет свои особенности, поэтому требуется соответствующая настройка для каждой версии VS. Ниже представлена таблица соответствия версий VS:
VS продукт | Соответствующая версия | Год выпуска |
---|---|---|
MS VC++ 14.0 | _MSC_VER = 1900 | (Visual Studio 2015) |
MS VC++ 12.0 | _MSC_VER = 1800 | (VisualStudio 2013) |
MS VC++ 11.0 | _MSC_VER = 1700 | (VisualStudio 2012) |
MS VC++ 10.0 | _MSC_VER = 1600 | (VisualStudio 2010) |
MS VC++ 9.0 | _MSC_VER = 1500 | (VisualStudio 2008) |
MS VC++ 8.0 | _MSC_VER = 1400 | (VisualStudio 2005) |
MS VC++ 7.1 | _MSC_VER = 1310 | (VisualStudio 2003) |
MS VC++ 7.0 | _MSC_VER = 1300 | (VisualStudio .NET) |
MS VC++ 6.0 | _MSC_VER = 1200 | (VisualStudio 98) |
MS VC++ 5.0 | _MSC_VER = 1100 | (VisualStudio 97) |
2018-02-28
После многочисленных попыток реализовать интерфейс POSIX C непосредственно в Visual Studio были выявлены следующие трудности:
Существует серьёзная зависимость между проектами msvcr, msvcp и windows sdk, реализованными в Visual Studio. Разделение этих компонентов требует значительных усилий.
По умолчанию Visual Studio автоматически включает эти каталоги заголовков и связывает их с различными библиотечными файлами в соответствии с параметрами компиляции и компоновки.
В зависимости от параметров генерации EXE и DLL, Visual Studio автоматически добавляет код инициализации и выбирает соответствующие библиотеки, которые находятся в стандартных путях библиотек. Если необходимо исключить стандартные библиотеки, необходимо самостоятельно реализовать этот код инициализации, что является сложной задачей.
Реализация совместимости с POSIX C отдельно может столкнуться с ограничениями при практическом использовании. В Linux большинство проектов представляют собой смесь C/C++, а чистый код C имеет более длительную историю.
Учитывая все аспекты, предлагается компромиссное решение проблемы. Можно продолжать использовать оригинальные файлы заголовков и библиотеки, одновременно создавая отдельный каталог с иерархией, аналогичной структуре каталогов в Linux. Если файл заголовка POSIX C отсутствует в VS, его можно заново реализовать. Если он уже существует, можно просто сослаться на него. Наиболее сложным аспектом является ситуация, когда файл заголовка присутствует, но некоторые функции не реализованы. В этом случае, согласно макросам, функции POSIX должны быть реализованы в Windows.
Этот подход может потребовать дополнительных усилий при компиляции исходного кода Linux, так как необходимо проверять наличие функций и включать соответствующие файлы заголовков.
Также существует альтернативное решение, которое обеспечивает соответствие файлов заголовков стандарту POSIX, но требует больше работы.
Создайте новую динамическую библиотеку и установите свойство «Игнорировать стандартные пути включения» в свойствах проекта. Однако оставьте стандартные библиотеки включёнными.
Организуйте файлы заголовков в соответствии со структурой каталогов POSIX и включите функции, соответствующие стандарту POSIX. Если функция отсутствует, реализуйте её в этой библиотеке.
Проблемы с C++ относительно просты — скопируйте соответствующие файлы заголовков и выполните небольшую настройку.
Любой исходный код Linux может быть скомпилирован под VS, если игнорировать стандартные пути включения и использовать файлы заголовков из новой динамической библиотеки.
Оба подхода позволяют избежать масштабных изменений в VS и максимально использовать встроенные библиотеки, что снижает зависимость от конкретной версии VS и обеспечивает лучшую совместимость.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )