1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/romandion-quark

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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 были выявлены следующие трудности:

  1. Существует серьёзная зависимость между проектами msvcr, msvcp и windows sdk, реализованными в Visual Studio. Разделение этих компонентов требует значительных усилий.

  2. По умолчанию Visual Studio автоматически включает эти каталоги заголовков и связывает их с различными библиотечными файлами в соответствии с параметрами компиляции и компоновки.

  3. В зависимости от параметров генерации EXE и DLL, Visual Studio автоматически добавляет код инициализации и выбирает соответствующие библиотеки, которые находятся в стандартных путях библиотек. Если необходимо исключить стандартные библиотеки, необходимо самостоятельно реализовать этот код инициализации, что является сложной задачей.

  4. Реализация совместимости с POSIX C отдельно может столкнуться с ограничениями при практическом использовании. В Linux большинство проектов представляют собой смесь C/C++, а чистый код C имеет более длительную историю.

Учитывая все аспекты, предлагается компромиссное решение проблемы. Можно продолжать использовать оригинальные файлы заголовков и библиотеки, одновременно создавая отдельный каталог с иерархией, аналогичной структуре каталогов в Linux. Если файл заголовка POSIX C отсутствует в VS, его можно заново реализовать. Если он уже существует, можно просто сослаться на него. Наиболее сложным аспектом является ситуация, когда файл заголовка присутствует, но некоторые функции не реализованы. В этом случае, согласно макросам, функции POSIX должны быть реализованы в Windows.

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

Также существует альтернативное решение, которое обеспечивает соответствие файлов заголовков стандарту POSIX, но требует больше работы.

  1. Создайте новую динамическую библиотеку и установите свойство «Игнорировать стандартные пути включения» в свойствах проекта. Однако оставьте стандартные библиотеки включёнными.

  2. Организуйте файлы заголовков в соответствии со структурой каталогов POSIX и включите функции, соответствующие стандарту POSIX. Если функция отсутствует, реализуйте её в этой библиотеке.

  3. Проблемы с C++ относительно просты — скопируйте соответствующие файлы заголовков и выполните небольшую настройку.

Любой исходный код Linux может быть скомпилирован под VS, если игнорировать стандартные пути включения и использовать файлы заголовков из новой динамической библиотеки.

Оба подхода позволяют избежать масштабных изменений в VS и максимально использовать встроенные библиотеки, что снижает зависимость от конкретной версии VS и обеспечивает лучшую совместимость.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Проект qkc — это подпроект проекта quark. Он реализует POSIX-интерфейс в Windows, что позволяет компилировать исходный код на C для Linux непосредственно в Visual Studio и создавать локальные библиотеки. Этот проект работает только в среде VS, а в Linux происходит лишь простое перенаправление. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/romandion-quark.git
git@api.gitlife.ru:oschina-mirror/romandion-quark.git
oschina-mirror
romandion-quark
romandion-quark
master