Подтвердить что ты не робот

Перекрестный компилятор С++ из Windows в Linux

Есть ли какие-либо дружественные пользователю инструменты для кросс-компиляции из Windows в Linux?

4b9b3361

Ответ 1

crosstool-ng поддерживает сборку кросс-компиляторов с хостом cygwin.

Обзор:

  • Установите Cygwin с пакетами разработки
  • Загрузить crosstool-ng
  • Извлеките тарбол (tar xvjf crosstool-ng*)
  • Запустите ./configure
  • Когда configure жалуется на отсутствующий инструмент, вернитесь к настройке Cygwin и установите соответствующий пакет (например, flex, libtool, ncurses-devel). Вам понадобится как минимум следующее:
    • Devel/Gperf
    • Devel/бизон
    • Devel/byacc
    • Devel/Wget
    • Devel/патч
    • Разработка/изготовление (версия GNU)
    • Devel/automake 1. 10+
    • Libs/libncursesw10
    • Libs/libncursesw10-разви
  • make
  • make install
  • Создайте новый каталог для сборки кросс-компилятора, например, /usr/src/cross-linux-gnu-root
  • Включить общесистемную поддержку чувствительности к регистру в реестре (см. https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem#answer-842670)
  • Смонтируйте каталог с учетом регистра (например, mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1)
  • Из каталога сборки кросс-компилятора, ct-ng menuconfig
  • В меню установите целевую архитектуру на x86 (вероятно) и субархитектуру на i686 (избегает проблем GCC 4.8, благодаря osm0sis), целевое ядро на linux и целевую библиотеку C на glibc и включите компилятор C++.
  • Чтобы обойти проблему 4.0,, также включите ЭКСПЕРИМЕНТАЛЬНО в Paths and misc options, затем перейдите в Companion tools (на верхнем уровне) и включите Build some companion tools, а затем make 3.81 (спасибо osm0sis)
  • У wget есть проблемы с последними сертификатами kernel.org, поэтому используйте метод .wgetrc в этом принятом ответе: Как исправить ошибки сертификатов при запуске wget по URL-адресу HTTPS в Cygwin? (Спасибо osm0sis)
  • В настоящее время требуется 3 патча для файлов, чтобы избежать дальнейших ошибок:
  • ct-ng build

Конечно, это НЕ позволит вам создавать приложения linux из Visual Studio. (VS2010 и более поздние версии позволяют создавать с другими цепями инструментов, такими как gcc, но вам потребуется соответствующее описание цепочки инструментов в дополнение к кросс-компилятору, созданному с помощью crosstool-ng). Но у вас будет рабочий g++-linux-gnu, который вы можете запустить напрямую или с помощью Makefile.

ПРИМЕЧАНИЕ. Сборка кросс-компилятора занимает много времени. osm0sis предоставил готовый gcc 4.8.1 здесь вместе со своими замечаниями по созданию кросс-компилятора (используется для обновления этого ответа).

Ответ 2

Вы просите что-то, что может взять код, написанный для запуска в Windows, и заставить его работать в Linux? Там действительно не компилятор, который это делает - но, возможно, вы ищете Wine (http://www.winehq.org/), который позволяет запускать приложения Windows на Linux ( если они используют API, то Wine вырвалось).

Изменить: Я предполагаю, что ваш код использует Windows API (Win32 и т.д.) в этом ответе. Если вы используете только стандартный С++ и библиотеки, доступные для кросс-платформенного, тогда есть много других ответов.

Ответ 3

Лучше всего использовать межплатформенную IDE, такую ​​как Code:: Blocks, которая может импортировать проекты MSVC и генерировать Makefile для Linux, который вы можете запустить в Linux (с той же программой, если вы этого пожелаете).

Итак, ваш рабочий поток будет выглядеть примерно так:

Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile
-> test compile and debug with GCC
-> copy to Linux with Code::Blocks -> test compile & debug on Linux

Это немного тупое, возможно, но, по крайней мере, Code:: Blocks заботится о многих мелких деталях с такими вещами, как Make файлы, а что нет.

Ответ 4

Компилировать в Linux из Windows без использования виртуализации или кросс-компиляции, но только через CoLinux. Создавайте собственные исполняемые файлы Linux, не покидая (перезагружая) окна. C/C++ Компиляция для Linux под Windows через Cooperative Linux. Самое быстрое переключение между Windows и Linux через Alt + Tab (перезапуск или перезагрузка не требуются):

  1. Установите CoLinux
  2. Используйте образ корневой файловой системы CoLinux: Ubuntu-9.04-1gb.7z
  3. Запустите CoLinux
  4. Измените строку archive.ubuntu.com на old-releases.ubuntu.com с помощью:
$ sudo vi /etc/apt/sources.list
  1. Обновите свою конфигурацию:
$ sudo apt-get update
  1. Установите два пакета программного обеспечения, чтобы иметь возможность компилировать ваши программы (c/C++, компиляторы gcc, mysql dev 5.1):
$ sudo apt-get install build-essential
$ sudo apt-get install libmysqlclient15-dev
  1. Доступ к каталогам Windows из CoLinux:
$ mount cofs0 /mnt/ -t cofs
$ cd /mnt
  1. Компиляция
$ c++ your.source.cc -o executable.name

Ответ 5

Я не верю, что есть компиляторы, которые позволяют вам скомпилировать в Windows, а затем взять полученный двоичный файл и запустить его на машине Linux. Лучше всего настроить две среды разработки: одну на Windows и одну на Linux. Выполняйте большую часть своей разработки и отладки в среде Windows, если это подходит вам, а затем часто компилируйте и тестируйте под Linux, чтобы убедиться, что ваш код действительно кросс-платформенный. Вы также захотите использовать межплатформенную систему сборки и тестовую инфраструктуру. Я рекомендую использовать cmake и Google Test, соответственно.