Есть ли какие-либо дружественные пользователю инструменты для кросс-компиляции из Windows в Linux?
Перекрестный компилятор С++ из Windows в Linux
Ответ 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 патча для файлов, чтобы избежать дальнейших ошибок:
- _libintl_gettext ошибка, как указано в комментариях
- заголовки смещения байтов и
- заголовки ELF (спасибо Duncan Calvert & osm0sis)
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 (перезапуск или перезагрузка не требуются):
- Установите CoLinux
- Используйте образ корневой файловой системы CoLinux: Ubuntu-9.04-1gb.7z
- Запустите CoLinux
- Измените строку
archive.ubuntu.com
наold-releases.ubuntu.com
с помощью:
$ sudo vi /etc/apt/sources.list
- Обновите свою конфигурацию:
$ sudo apt-get update
- Установите два пакета программного обеспечения, чтобы иметь возможность компилировать ваши программы (c/C++, компиляторы gcc, mysql dev 5.1):
$ sudo apt-get install build-essential
$ sudo apt-get install libmysqlclient15-dev
- Доступ к каталогам Windows из CoLinux:
$ mount cofs0 /mnt/ -t cofs
$ cd /mnt
- Компиляция
$ c++ your.source.cc -o executable.name
Ответ 5
Я не верю, что есть компиляторы, которые позволяют вам скомпилировать в Windows, а затем взять полученный двоичный файл и запустить его на машине Linux. Лучше всего настроить две среды разработки: одну на Windows и одну на Linux. Выполняйте большую часть своей разработки и отладки в среде Windows, если это подходит вам, а затем часто компилируйте и тестируйте под Linux, чтобы убедиться, что ваш код действительно кросс-платформенный. Вы также захотите использовать межплатформенную систему сборки и тестовую инфраструктуру. Я рекомендую использовать cmake и Google Test, соответственно.