Подтвердить что ты не робот

Как использовать 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
4b9b3361

Ответ 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, что приведет к ошибкам, которые вы указали выше.