LINUX.ORG.RU

Как компилить 64 бит бинарники в MinGW из под wine?

 , , ,


0

1

Скачал инсталлятор mingw-w64-install.exe, запустил вайном, установил новый компилятор, пытаюсь собрать им простейшую библиотеку, а «лыжи не едут»:

wine cmd
pat.bat
cd libogg-1.3.3
configure --enable-static
Получаю
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
и сборка чего-то ждёт, жму энтер и пытаюсь вызвать make, но в компиляторе есть только такой mingw32-make.exe, пытаюсь собрать им
mingw32-make.exe
Makefile:386: *** target pattern contains no '%'.  Stop.
и получаю ошибку. Как же всё-таки из под вайна им собирать 64 битные бинарники?

★★★★★

Скачать правильный компилятор, и всё работает.

Ссылка на правильный компилятор: https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/...

Если правильный компилятор не поможет, можешь ещё msys2 скачать и позапускать в wine http://www.msys2.org/

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

С правильным компилятором абсолютно тот же эффект. Последний иснсталлятор msys2 не запускается, версия 2015 года выдаёт пару ошибок, которые можно пропустить. Но там ещё есть сборки в виде архивов - те распаковываются. Последний msys2 глючит, попробую распаковать самый древний что дают, то есть 2015 года.

Napilnik ★★★★★
() автор топика

Зачем тебе из-под wine-то это делать? Какое-то извращение, натурально. Поставь mingw собранный как кросс-компилятор и собирай им что хочешь под венду без всякого wine. Для опакечивания есть nsis который тоже замечательно собирается и работает нативно.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Зачем тебе из-под wine-то это делать? Какое-то извращение, натурально.

Нормальные компиляторы в вайне работают нормально.

Поставь mingw собранный как кросс-компилятор и собирай им что хочешь под венду без всякого wine.

Ты сейчас точно про линукс говоришь или про какую-то другую ОС?

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

Нормальные компиляторы в вайне работают нормально.

Они и работают нормально. У тебя не работает линуксовая баш-лапша, генерирующая Makefile'ы, заточенная под GNU/Linux only и класть хотевшая на Wine.

А вообще не нужно маяться дурью, когда можно скачать готовое:

http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-libogg-1.3.2-2-any.pkg.ta...

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

А вообще не нужно маяться дурью, когда можно скачать готовое:

Хреново они там раздают, без *.o хлама. Теоретически, его можно вытащить из *.a файлов, и это как бы умели делать линуксовые архиваторы, когда-то у меня такое работало, но неизвестно, какой пакет для этого нужен.

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

Нормальные компиляторы в вайне работают нормально.

Но зачем запускать компиляторы в вайне, если их можно запускать нативно?

Ты сейчас точно про линукс говоришь или про какую-то другую ОС?

Да, точно про линукс. Тебе вообще не нужен wine чтобы под линуксом собирать софт под венду.

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

Удваиваю, самый простой способ.

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

Но зачем запускать компиляторы в вайне, если их можно запускать нативно?

Загружаться в кучу ОС - так себе радость.

Да, точно про линукс. Тебе вообще не нужен wine чтобы под линуксом собирать софт под венду.

В федоре так:

mingw64-configure  --enable-static
make
make install
Используй ту версию компилятора что дали и ставь dll в систему, иначе зависимости при сборке работать не будут. И в самый интересный момент получая
file format not recognized; treating as linker script

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

Загружаться в кучу ОС - так себе радость.

Какая нахрен куча ОС? Нужен только линукс, чтобы собирать что угодно, под что угодно, кроме, разве что макоси, но и то, вроде можно с бубном.

В федоре так:

И зачем эти костыли от упорышей? Тебе надо ./configure --host=какой-там-префикс-у-mingw-кросс-тулзов и всё.

Используй ту версию компилятора что дали

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

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

Что за бред? Вендовая *.dll тебе нужна ровно один раз, причём только для того, чтобы натравить на неё dlltool и получить *.def, из которого потом тем же dlltool сделать lib*.a, которую положить туда, где configure/cmake/etc. её найдет. После этого про *.dll можно забыть навсегда.

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

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

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

Что за бред? Вендовая *.dll тебе нужна ровно один раз, причём только для того, чтобы натравить на неё dlltool и получить *.def, из которого потом тем же dlltool сделать lib*.a, которую положить туда, где configure/cmake/etc. её найдет. После этого про *.dll можно забыть навсегда.

Пусть не сама dll, но какая-то информация о ней при make install в систему добавляется, иначе как бы при сборке следующей либы использовалась собранная перед этим.

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

Вопрос так не стоит, нужны только либы, вернее куски либ, а они не должны быть несовместимы из-за каких-то оптимизаций, пользу от которых без приборов не ощутить.

Ну собирай с -O0, делов-то.

Пусть не сама dll, но какая-то информация о ней при make install в систему добавляется

Заголовочные файлы и затычка lib*.a чтобы линкер правильную инфу (название dll, название функции и тип вызова) для вендового загрузчика PE в бинарник прописал. При кросс-компиляции это всё можно складывать в любое удобное место, куда потом отправлять компилятор и линкер за хедерами и либами. Либо в хомяке где-нибудь, либо общесистемно в какую-нибудь /usr/share/mingw64/lib,include

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

Ну собирай с -O0, делов-то.

Если бы. Там легко можно такое накомпилять, что у меня вайн не потянет. А десятка в виртуалке жрёт столько что ничего кроме тормозов не показывает. Нафиг такие оптимизации без повышения минимального требования к железу. В линуксе ещё веселее, там испортить программу новым компилятором раз плюнуть. Как в десуре, а потом в стиме: сделали обновление клиента и привет, запускайте в другом линуксе.

Какой директивой в сишном исходнике линковать *.o файлы?

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

Какой директивой в сишном исходнике линковать *.o файлы?

mingw-gcc -o binary.exe source.c file.o another_file.o yet_another_file.o -lsomelib1 -lsomelib2

При этом компилятору надо сказать где лежат libsomelib1.a и libsomelib2.a, если они где-то в нестандартном месте. Это делается опцией -L.

Ну и вообще man gcc полезно почитать.

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

Есть, собрать theora для win64 только им не получилось.

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