Как использовать 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 с MinGW gcc
  • Cygwin shell с Cygwin gcc (gcc4-core)

тогда wget будет компилироваться.

основываясь на ответе ak2, это, похоже, работает

./configure --host=x86_64-w64-mingw32 --disable-ipv6 --without-ssl
make

2 ответов


ak2 частично неверно, как указано здесь.

правильный вариант --host=x86_64-w64-mingw32 Как вы узнали. --target используется для построения кросс-компиляторе. Варианты:

  • --build: что вы строите на
  • --host: что вы строите для
  • --target: Если то, что вы строите, является кросс-компилятором, для чего этот кросс-компилятор будет строить.

компилятор MinGW-w64 Cygwin является кросс-компилятором, потому что он размещен на Cygwin, но нацелен на MinGW-w64. Вам просто нужно сказать configure о , например:

--target=x86_64-w64-mingw32

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

Гибка система альтернативные инструменты /usr/bin пункт в MinGW-w64 не является хорошей идеей, потому что таким образом вы будете использовать инструменты MinGW с заголовками и библиотеками Cygwin, что приводит к ошибкам, подобным приведенным выше.