Как можно скомпилировать C++ Linux/Android/etc программу из-под Windows?

334
30 января 2019, 22:20

Вопрос в заголовке. Как можно скомпилировать бинарник для использования на Linux/Android/etc, используя Windows? Для сборки использую make, но, вроде, gcc не умеет собирать те же Linux'овые бинарники из-под винды.

Аналогичный вопрос для статичных и динамических библиотек. Как я понял, тот же NDK может компилировать .so файлы из-под Windows, однако, я так и не разобрался как.

UPD1: Под сборкой из-под Windows я имел ввиду именно сборку из-под Windows. Виртуальные машины - хороший вариант, но мне не подходит.

UPD2: Хорошими вариантами можно назвать следующие:

1. Установка CoLinux и компиляция с его помощью https://stackoverflow.com/a/21550741/10400333

2. Использование crosstool-ng для создания компилера для кросс-компиляции: https://stackoverflow.com/a/4770417/10400333

Answer 1

Могу сказать за обратный процесс. Из под линукса компилирование виндовых программ возможно. Только нужно скачивать виндовый компилятор mingw, который работает под линукс. Скорее всего в винде это также возможно.

Answer 2

Visual Studio 2017 позволяет разрабатывать программы для Linux. Но компиляция и отладка там происходит в Linux. Делается это так:

Запускается виртуальная машина с Линуксом (я делал это с VMware), там должен быть установлен компилятор и отладчик (все это подробно описано в хелпе VS). В сетевых настройках VM указывается IP, на котором эта VM должна сидеть (локальный адрес из 192.168.x.x годится).

В VS создается Линукс проект (при установке VS эта возможность должна быть включена), и в настройках указывается IP виртуальной машины. Это все, дальше разработка и отладка делается так же, как и для Windows.

VS 2017 поддерживает разработку и для мобильных платформ (на С++ для Андроид, к примеру), но сам не пробовал, так что ничего тут не могу сказать.

Answer 3

«Это возможно, но очень, очень дорого» © анекдот.

Действительно, как указали в комментариях, может получиться проще поставить виртуальную машину с тем же дебианом или убунту гигабайт на сорок, сделать там apt-get install build-essential и получить минимальный набор для компиляции C/C++, родные инструменты для сборки пакетов в .deb и т.д.

Учтите ещё, что понятие «бинарник для Linux» весьма расплывчато само по себе, т.к. линуксы все разные даже на одной и той же аппаратной платформе: в разных дистрибутивах разные версии динамических библиотек. Ну и, конечно, разные платформы.

READ ALSO
Тип bool в шейдерах DirectX11

Тип bool в шейдерах DirectX11

Имею DirectX11 и небольшой движокЧто хочу сделать - отправить в вершинный шейдер структурный буфер собственного типа(в типе единственный член,...

251
Для чего нужно (char *) при взятии адреса &mass_size?

Для чего нужно (char *) при взятии адреса &mass_size?

Нужно записать в бинарный файл число типа int, хранящееся в переменной mass_size

247
Как разбить элемент массива строк на массив из его символов?

Как разбить элемент массива строк на массив из его символов?

Есть массивы a и b типа string, где a[1]="hello"; a[2]="woRlD"; a[3]="qejqjekqew"; Массив b изначально пустой

272
C++ atomic runtime error

C++ atomic runtime error

Программа компилируеться, но выводит всегда одно и тоже число, и не выходит корректно

383