Кросс-компиляция C++; с Linux на Windows, это действительно работает?
У меня есть исходный код для некоторых очень простых программ командной строки. Я рассматривал вариант компиляции их на машине Linux (они были разработаны здесь), чтобы их можно было использовать в Windows. Если я не ошибаюсь, это называется кросс-компиляция. Я никогда не пробовал, но читая вчера некоторую информацию, она кажется сложной или неуспешной. Я хотел бы услышать ваше мнение и как я могу портировать простую программу "hello world", которая компилируется в Linux с g++.
Спасибо
5 ответов
Посмотрите на mingw, набор инструментов для создания приложений Win32 в Linux. Если программы не зависят от какой-либо специфической для Linux функциональности, не поддерживаемой mingw, у вас все будет хорошо.
Обратите внимание, что кросс-компиляция - это не то же самое, что кроссплатформенность. При кросс-компиляции вы компилируете код в исполняемый файл Windows на компьютере с Linux, а затем переносите исполняемый файл на компьютер с Windows. С кроссплатформенностью вы переносите исходный код в коробку Windows и компилируете в исполняемый файл Windows, используя компилятор Windows.
Первое довольно сложно (но не невозможно), второе очень просто, используя такой компилятор, как MinGW, как уже упоминали другие.
Я кросс-компилирую ежедневно. Но я не настраиваю кросс-компиляторы ежедневно. Это может быть сложно, но, безусловно, возможно.
Пока вы используете стандартный C++, ваш код будет кроссплатформенным. Вы также можете использовать кроссплатформенные библиотеки, такие как STL, boost, Poco, Qt и т. Д.
Только когда вы начинаете использовать специфичный для платформы код, вы теряете переносимость. Например, включая <windows.h>
сделает ваш код компилируемым только в Windows. (Вокруг этого есть такие методы, как макрос #ifdef. Это позволяет использовать определенные части кода только на одной платформе.)
Так что простая программа hello world должна работать на Linux, Mac, Windows или любой другой платформе. Вам не нужно ничего особенного для этого.
Замечания:
Некоторые могут упомянуть Cygwin или mingw32. Я кратко объясню, что они:
Cygwin позволяет вам компилировать приложения Linux, используя gcc/g++ на компьютере с Windows.
Mingw32 позволяет вам компилировать приложения Windows, используя gcc/g++ на компьютере с Windows.
Редактировать:
Если вы хотите настроить систему для кросс-компиляции, то я рекомендую вам взглянуть на cmake.
Да. В настоящее время мы собираем приложение 250 kloc, которое запускает Qt с ежедневными сборками. Он работает идеально каждый день, хотя я должен признать, что он не распространяется вне компании, а используется только внутри компании. Для официальных выпусков Visual Studio является предпочтительным.
Скомпилировано с использованием стандартных пакетов mingw в Debian.