Кросс-компиляция C ++; с Linux на Windows, это действительно работает? - PullRequest
5 голосов
/ 04 декабря 2009

У меня есть исходный код для некоторых очень простых программ командной строки. Я рассматривал вариант компиляции их на машине Linux (они были разработаны здесь), чтобы их можно было использовать в Windows. Если я не ошибаюсь, это называется кросс-компиляция. Я никогда не пробовал, но читая вчера некоторую информацию, она кажется сложной или неуспешной. Я хотел бы услышать о вашем мнении и о том, как я могу портировать простую программу «hello world», которая компилируется в Linux с g ++.

Спасибо

Ответы [ 5 ]

7 голосов
/ 04 декабря 2009

Посмотрите на mingw , набор инструментов для создания приложений Win32 в Linux. Если программы не зависят от каких-либо специфических для Linux функций, не поддерживаемых mingw, у вас все будет в порядке.

4 голосов
/ 04 декабря 2009

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

Первое довольно сложно (но не невозможно), второе очень просто, используя такой компилятор, как MinGW, как упоминали другие.

1 голос
/ 04 декабря 2009

Пока вы используете стандартный 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.

Edit:
Если вы хотите настроить систему для кросс-компиляции, то я рекомендую вам взглянуть на cmake .

1 голос
/ 04 декабря 2009

Я кросс-компилирую ежедневно. Но я не не настраиваю кросс-компиляторы ежедневно. Это может быть сложно, но, безусловно, возможно.

0 голосов
/ 04 декабря 2009

Да. В настоящее время мы собираем приложение 250 kloc, запускаем Qt с ежедневными сборками. Он работает идеально каждый день, хотя я должен признать, что он не распространяется за пределами компании, а используется только внутри компании. Для официальных выпусков рекомендуется использовать Visual Studio.

Скомпилировано с использованием стандартных пакетов mingw в Debian.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...