Как использовать MinGW-w64 с Cygwin?
MinGW-w64 доступен с Cygwin хотя бы с декабрь 2010.
Однако мне сложно использовать это, чтобы скомпилировать почти все. Я установил символические ссылки с альтернативы
p=x86_64-w64-mingw32
alternatives \
--install /usr/bin/gcc.exe gcc /usr/bin/$p-gcc.exe 0 \
--slave /usr/bin/ar.exe ar /usr/bin/$p-ar.exe
Например, если я пытаюсь скомпилировать wget
./configure --without-ssl
make
Ошибки (отредактированные для краткости)
connect.o:connect.c:(.text+0x3f): undefined reference to `__imp_htons'
connect.o:connect.c:(.text+0xbe7): undefined reference to `__imp_ntohs'
connect.o:connect.c:(.text+0xd96): undefined reference to `run_with_timeout'
Если я использую
- MinGW shell с MinGW gcc
- оболочка Cygwin с Cygwin gcc (
gcc4-core
)
Затем Wget будет компилироваться.
На основании ответа ak2 это работает
./configure --host=x86_64-w64-mingw32 --disable-ipv6 --without-ssl
make
Ответы
Ответ 1
ak2 частично неверно, как указано здесь.
Правильная опция --host=x86_64-w64-mingw32
, как вы узнали. --target
используется для построения самого кросс-компилятора. Возможные варианты:
-
--build
: Что вы строите на
-
--host
: Что вы строите для
-
--target
: Если то, что вы строите, является кросс-компилятором, для чего будет создан этот кросс-компилятор.
Ответ 2
Компилятор Cygwin MinGW-w64 является кросс-компилятором, поскольку он размещен на Cygwin, но нацелен на MinGW-w64. Вам просто нужно сообщить configure
об этом с помощью параметра --target
, например:
--target=x86_64-w64-mingw32
Таким образом, make
будет ссылаться на соответствующие инструменты. Вам также потребуется установить или создать версии MinGW-w64 любых библиотек, которые пакет, который вы пытаетесь построить, зависит от.
Изгиб системы альтернатив, чтобы инструменты в /usr/bin
указывали на MinGW-w64, не очень хорошая идея, потому что таким образом вы будете использовать инструменты MinGW с заголовками и библиотеками Cygwin, что приведет к ошибкам, которые вы указали выше.