Компиляция консольных приложений Windows C в Linux

Могу ли я скомпилировать консольное приложение Windows C (.exe) в Linux? (точнее, Ubuntu)

Я давно слышал о кросс-компиляторах, но тогда они меня не интересовали.

С наилучшими пожеланиями


person John F.    schedule 25.11.2009    source источник


Ответы (8)


Существует это сообщение, в котором содержится некоторая информация, а также это повторяющийся вопрос

Поскольку вы используете Ubuntu, вам нужны пакеты (я думаю) mingw32

apt-get install mingw32

Затем скомпилируйте с помощью i586-mingw32msvc-gcc, например.

i586-mingw32msvc-gcc helloworld.c -o helloworld.exe
person Yacoby    schedule 25.11.2009
comment
Лучший ответ на данный момент, и да, был обман: D Также приятно опубликовать необходимые пакеты. Прямой ответ, на удар. - person Jorge Israel Peña; 25.11.2009
comment
Спасибо за ответ. Также извините за дублирующийся вопрос, я не заметил. :-) Продолжайте хорошую работу! Еще раз спасибо. - person John F.; 25.11.2009
comment
В Fedora у нас также есть ресурсы для изучения компиляции для win32 с использованием mingw, irc-канала, утилит mingw32 и набора готовых библиотек для Windows — для получения дополнительной информации см.: fedoraproject.org/wiki/SIGs/MinGW . - person Conrad Meyer; 26.11.2009

Можно, если это стандартный C и не используются библиотеки Windows.

Сам код C очень переносим, ​​а стандартные библиотеки C (libc) доступны почти везде. Если ваш код выполняет функции printf(), sscanf(), fopen() и так далее, он просто скомпилируется и запустится на другой платформе. Windows, Linux, BSD и т. д.

Проблемы с переносимостью создают библиотеки, отличные от libc.

Все, что связано с библиотеками платформы Windows, вызывает проблемы. Kernel32.lib, user32.lib и т.д.

Также есть сторонние библиотеки, которые, если они написаны на C, должны быть доступны в Linux и Windows. Хорошим примером здесь является PCRE — это библиотека регулярных выражений, написанная на C, и она доступна как в Windows, так и в Linux. в этом наборе буквально сотни библиотек.

Если вы ограничитесь вызовами libc и библиотек в переносимые библиотеки, то у вас будет переносимое приложение C.

person Cheeso    schedule 25.11.2009
comment
Раньше я компилировал приложения с графическим интерфейсом для Windows в Linux, я использовал набор инструментов GTK gui. - person Jasen; 11.01.2017

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

Если вам нравятся системные библиотеки Windows, вам придется заменить эти вызовы их системными эквивалентами * nix (если они есть).

person Justin Niessner    schedule 25.11.2009

Если вы хотите скомпилировать программу из Linux в исполняемый файл Windows, да, кросс-компиляторы будут вариантом. http://www.airs.com/ian/configure/configure_5.html немного помог.

person Jay    schedule 25.11.2009

Вы имеете в виду, можете ли вы создать Windows .exe в Linux (т.е. разработать в Linux и доставить приложение пользователям Windows?)

Или вы имеете в виду взять приложение для Windows и перекомпилировать (перенести) его в Linux, чтобы оно было построено и работало в Linux?

person Martin Beckett    schedule 25.11.2009

Вы можете использовать WINE и установить VS, например. Другое решение использует MonoDevelop.
также вы можете использовать кросс-компиляторы, такие как Код::Блоки

person Sajad Bahmani    schedule 25.11.2009

Возможна кросс-компиляция. Насколько я знаю, вы получаете исполняемый файл Windows, который, конечно же, будет работать под Windows (и, возможно, WINE).

Для этого есть 2 возможных варианта: mingw и cygwin.

Один учебник здесь. Страница кросс-компиляции MingW находится здесь.

person Dan Cristoloveanu    schedule 25.11.2009

Вы также можете использовать стандартный gcc в терминале Linux, вы можете использовать те же программы, которые вам нужны, только для изменения std.h с unistd.h (это означает, что вам нужно будет перейти на библиотеки, специфичные для Linux). У меня есть курс по программированию для Linux в школе, за исключением того, что он касается Ubuntu и изменений в библиотеке для ввода / вывода и некоторых связанных с потоками специфических для Linux, все это одно и то же

пример: gcc -c myprogram.c // для компиляции gcc -o myprogram.o имя для создания lib myprogram // с аргументами, если они есть

person radu florescu    schedule 25.11.2009