LINUX.ORG.RU

Кросс-компиляция из Windows под Linux. Получение бинарных файлов под Linux


0

2

Мне поставили задачу - разобраться с кросскомпиляцией C и C++ приложений из под Windows для Linux.

Я попробовал использовать Cygwin для этих целей. Установил эту оболочку, запустил её. Установил компилятор cygwin-gcc-3.3.6-glibc-2.3.2-linux (старый правда). И попробовал из него скомпилировать обычный HelloWorld и запустить его под Linux всё получилось.

Но задача стоит чтобы из нашего Windows-приложения запускать кросс-компилятор, который будет компилировать некоторые файлы. Как вообще это можно реализовать? Просто в данном случае приходится запускать Cygwin, а уже из него gcc-linux или g++-linux. Пока не вижу путей запуска из нашего приложения Windows Cygwin и далее уже в нём запуска компилятора.

Может быть какие-то есть другие выходы из ситуации? Как-то можно настроить вообще отдельный компилятор по Windows, который будет компилить бинарники под Linux?


Все равно же для запуска в линуксе придется компилять в линуксе.

Зачем эти извращения? На крайняк поставьте в виртуалбоксе линукс и компиляйте себе на здоровье.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

если скомпилить под Cygwin, а потом запустить скомпиленное под Linux, то всё норм. Перекомпиляцию делать не надо.

g-71
() автор топика
Ответ на: комментарий от Eddy_Em

да, тут я согласен с вами. А мне нужно наоборот. И это не извращения. VirtualBox ставить - плохой вариант. У нас файлы *.c генерятся в программе.

g-71
() автор топика
Ответ на: комментарий от g-71

Ладно, я ничего не понял, поэтому отваливаю.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Manhunt

И получится бинарник на много сотен мегабайт =)

// и вообще, у нас сайт про СПО, так что все равно исходники придется распространять!!! А отлаживать лучше в линуксе, а не в цигвине.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

не нужно будет ничего отлаживать. Программа генерирует си-шный код, файлы *.c, который нужно просто собрать, а потом это должно запускаться под linux

g-71
() автор топика
Ответ на: комментарий от g-71

Ну и зачем геморрой с компилянием в мастдае? Собираете тарбол, а в линуксе устанавливаете.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> И получится бинарник на много сотен мегабайт =)

Блобопроблемы.

Manhunt ★★★★★
()

> Пока не вижу путей запуска из нашего приложения Windows Cygwin и далее уже в нём запуска компилятора.

Было бы желание. При запуске Cygwin исполняется .bashrc или подобный ему файл. Если в этот файл прописать запуск make - то вполне можно таким образом скомпилячить заранее выложенный в условленную директорию проект.

Manhunt ★★★★★
()

А чем вас Msys не устраивает?

delete83 ★★
()

И да, перекомпиляция не нужна, если используются только динамические библиотеки. Главное, чтоб версии библиотек в линукс были совместимы с теми, для которых писался софт под виндой.

delete83 ★★
()

Автор - провокатор.
Под какой Linux копилять?
В каждой версии каждого дистра свои версии библиотек.
Hello world наверное везде заработает, а вот что-нибудь посерьёзнее...
Майнентейнеры пакетов в дистрах чем по-вашему занимаются?

Чтобы собрать в Cygwin или ещё в чём программу под Linux. Сначала надо:
1. Определиться с целевым дитстрибутивом
2. Загнать в среду сборки то же окружение что и в целевом дистрибутиве
3. Собрать
4. Всё равно прийдётся тестировать что заработает.

ИМХО проще собирать сразу в целевой системе (если целевая система не на чахлом arm'е работает). Если требуется организовать автоматизированную сборку и управлять ею с компьютера с установленным оффтопиком - это решается по другому.

P.S. Пожалуй единственный вариант когда оправдано собирать подобным образом софт под Linux - если Вы начинаете собирать LFS.

Slipeer
()
Ответ на: комментарий от g-71

> если скомпилить под Cygwin, а потом запустить скомпиленное под Linux, то всё норм. Перекомпиляцию делать не надо.

Скомпилённое под Cygwin будет иметь архитектуру cygwin-generic-i386 (или cygwin-generic-x86_84), что совсем не похоже на linux-generic-*.
Перекомпиляцию делать не надо, если программа будет в вайне запускаться с установленными в нём библиотеками Cygwin.

HINT: google://PE vs ELF

Slavaz ★★★★★
()
Ответ на: комментарий от Slipeer

Все сказано правильно. И, главное, разложено по полочкам.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Slipeer

> Под какой Linux копилять?

В каждой версии каждого дистра свои версии библиотек.


и что? статическую линковку и таскание с собой звисимостей еще никто не отменял

aho
()
Ответ на: комментарий от aho

Представьте себе приложение «средней тяжести». Пусть там будет всего лишь штук 30 зависимостей. А у тех - еще штук 50. И всю эту дребедень компилять статически?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Представьте себе приложение «средней тяжести». Пусть там будет всего лишь штук 30 зависимостей. А у тех - еще штук 50. И всю эту дребедень компилять статически?

«и таскание с собой зависимостей»

aho
()
Ответ на: комментарий от Eddy_Em

> В общем, для серьезного проекта придется таскать полдистрибутива (glibc, gcc etc).

рассмешил, спасибо, glibc с собой не таскают, как и gcc

aho
()
Ответ на: комментарий от aho

Вполне реальные. Посмотрите, сколько зависимостей у хорошего просмотрщика изображений. Да в моем несчастном велосипеде, который я время от времени пилю, около 14 зависимостей!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Т.е. ты не сталкивался с проблемами компилирования чего-то, требующего gcc-X из под gcc-{X-1} ?

а причем тут проблемы компилирования? и как компилирование может «требовать gcc-X из под gcc-{X-1}»?

aho
()
Ответ на: комментарий от Eddy_Em

> Посмотрите, сколько зависимостей у хорошего просмотрщика изображений.

не так уж много, и большая часть как раз легко линкуется статически

Да в моем несчастном велосипеде, который я время от времени пилю, около 14 зависимостей!


нормальная цифра, а вот если в сумме их 80 - уже что-то не так

aho
()
Ответ на: комментарий от Slipeer

сборка как раз будет для Embedded использоваться (точнее запускаться там). Для arm в том числе. Там только ядро и еще что-то (точно пока не могу сказать).

g-71
() автор топика
Ответ на: комментарий от g-71

Тогда скорее всего только статическая линковка. Вопрос лишь в том, хватит ли этом монстру памяти потом для работы на целевой машине.

delete83 ★★
()
Ответ на: комментарий от Eddy_Em

>И получится бинарник на много сотен мегабайт =)

Не получится. Более того, динамическая линковка в 90% случаев - говно.

Waterlaz ★★★★★
()
Ответ на: комментарий от Eddy_Em

>Вполне реальные. Посмотрите, сколько зависимостей у хорошего просмотрщика изображений. Да в моем несчастном велосипеде, который я время от времени пилю, около 14 зависимостей!

И че? Ты думаешь, что раз Х присутствует в зависимостях у У, то при статической линковке непременно весь Х войдет?

Waterlaz ★★★★★
()
Ответ на: комментарий от aho

>и что? статическую линковку и таскание с собой звисимостей еще никто не отменял

да не отменял, но на корпоративном уровне это выглядит откровенным «костылём»

Slipeer
()

из Windows под Linux:

                   /-------------\
                   |             |
/-----------\      |    Linux    |
|           |      |             |
|           \      \-------------/
|  windows    ->-+
|           /    |
|           |    +-----> компиляция
\-----------/

из под Windows для Linux:

/-----------\                       /---\
|           |                       |для|
|  windows  |                       \---/
|           |                         |
|           |                         |
|           |                         V
|           |
|           |     +--> компиляция ->  +  >-----> Linux
\-----------/     |                    
                  |
   компиляция ----+

компилятор по Windows, который будет компилить бинарники под Linux?

/-----------\      /-----------\
|           |      |           |
|  windows  |      |           |
|           |      |  Linux    |
|           |      |           |
|           |      |           |
\-----------/      \-----------/

   компилятор ----> бинарник
mi_estas
()
Ответ на: комментарий от mi_estas

Прошу обратить внимание, что на этом сайте Linux пишется с большой буквы, а windows с маленькой.

mi_estas
()
Ответ на: комментарий от g-71

>Программа генерирует си-шный код, файлы *.c, который нужно просто собрать, а потом это должно запускаться под linux

сгенерировали, scp -r builddir builder@linuxhost, ssh builder@linuxhost «/home/builder/buildmyprog.sh»

в чем проблема?

lazyklimm ★★★★★
()
Ответ на: комментарий от g-71

Тогда лучше всё-таки собирать в chroot'е
lazyklimm предложил неплохой но не единственный вариант.

P.S. У меня возникают сомнения что получится беспроблемно собрать под ARM и Linux ядро под Cygwin или чем-то аналогичном ИМХО. Никогда не заморачивался с кроскомпиляцией под оффтопик.

Slipeer
()
Ответ на: комментарий от Slipeer

> да не отменял, но на корпоративном уровне это выглядит откровенным «костылём»

а на «корпоративном уровне» знают способ как по другому обеспечить работу на многих дистрибутивах и их разных версиях? или предлагается подгонять ОС под софт?

aho
()
Ответ на: комментарий от aho

на «корпоративном» уровне существует такое понятие как «стандарт ОС»
и если и используются различные дистрибутивы, то это не десяток а 2-3-4.
И на серверах решающих однотипную задачу установлен одинаковый дистрибутив.

P.S. Хотя может я не в тех «корпорациях» работаю? ;)

Slipeer
()
Ответ на: комментарий от Slipeer

> на «корпоративном» уровне существует такое понятие как «стандарт ОС»

а... ты про ынтерпрайз, ну да - вы у себя там можете, что угодно делать под себя

P.S. Хотя может я не в тех «корпорациях» работаю? ;)


а я откуда знаю :)

aho
()
Ответ на: комментарий от g-71

>сборка как раз будет для Embedded использоваться (точнее запускаться там). Для arm в том числе. Там только ядро и еще что-то (точно пока не могу сказать).

Sourcery G++ [/thread]

AptGet ★★★
()

Тред переполнен бредом. Какие многие дистрибутивы? Какое, к черту, окружение, как в целевой системе?

Почему я, когда пишу программу, не беспокоюсь, какой там дистр у заказчика и какие у него там ядро, библиотеки и всякая другая хрень? Почему я просто беру и указываю, с каким версиями библиотек все будет пучком и все? А в случаях, когда надо у клиента все протестировать по быстрому, не заморачиваясь с версиями, просто делаю статическую линковку!

Капец, ТС, не слушай этот бред! Просто поставь и настрой MinGW и MSYS и насладись полноценной системой сборки под любую архитектуру, поддерживаемую gcc, с нативными библиотеками и нативными утилитами типа make, find, sed, autotools и другими!

delete83 ★★
()
Ответ на: комментарий от delete83

> Почему я просто беру и указываю, с каким версиями библиотек все будет пучком и все?

потому-что твоим говном никто не пользуется, очевидно, в дистрибутиве банально может не оказаться нужной версии библиотеки

aho
()
Ответ на: комментарий от aho

И да, всегда подразумевается некий довольно широкий диапазон версий библиотеки. В идеале, любая версия выше заданной.

delete83 ★★
()
Ответ на: комментарий от delete83

> Очевидно, ее всегда можно установить из репозитория

еще раз - нужной версии нет, а пакет со стороны требует новую libc и вообще ломает пол системы

или собрать из исходников.


даже комментировать не буду

aho
()
Ответ на: комментарий от Kosyak

> Новую libc? Они что еженедельно выпускаются?

обычно к каждой версии дистрибутива - новая, так что не еженедельно, но часто

И каждый раз ABI ломается?


оно просто не запустится

aho
()
Ответ на: комментарий от aho

>потому-что твоим говном никто не пользуется, очевидно, в дистрибутиве банально может не оказаться нужной версии библиотеки

+500

Почему я просто беру и указываю, с каким версиями библиотек все будет пучком и все? А в случаях, когда надо у клиента все протестировать по быстрому, не заморачиваясь с версиями, просто делаю статическую линковку!


При выборе ПО такой софт сразу идёт в топку.
Если свои разрабы пытаются что-нибудь такое отмочить - у них просто не принимают задачу пока не сделают всё правильно, ибо потом нафик никому не надо разбираться почему это ... перестало работать после внесения изменений в систему. А пока у разраба задача не закрыта денег он не получает ;)

Slipeer
()
Ответ на: комментарий от Slipeer

Ой, расскажите, пожалуйста, а каким ПО вы там тогда пользуетесь и как так написать программу, чтобы она требовала библиотеки, но совершенно не зависела бы от их версий?

delete83 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.