Кросс-компиляция из Linux - Windows, stdio имеет неопределенные ссылки (на __imp ___ acrt_iob_fun c) - PullRequest
0 голосов
/ 09 июля 2020

Как сказано в названии, я пытался скомпилировать довольно большой проект с довольно большим количеством зависимостей (библиотеки stati c и Dynami c). Я успешно скомпилировал каждую зависимость с помощью MinGW-w64, установил пути поиска include и библиотеки к их аналогам MinGW (/ usr / x86_64-w64-mingw32 / lib & include), и все же на этапе компоновки MinGW выдает ошибку для каждого вызова printf (конечно, с включенным stdio.h). Ошибки следующие:

/usr/bin/x86_64-w64-mingw32-ld: ./obj/XXXX.o:/usr/share/mingw-w64/include/stdio.h:352: undefined reference to `__imp___acrt_iob_func'

(где «XXXX» - имя файла из моего проекта)

Эта ошибка повторяется точно так же (за исключением имени файла объекта. ). Команда для связывания выглядит так:

/usr/bin/x86_64-w64-mingw32-g++ -o bin/ReleaseWin/Project @[file with object file names] -L. -L/usr/x86_64-w64-mingw32/lib/ [linking some dependencies (boost, openGL, SDL2, etc.)...] -m64 -flto

Я безрезультатно искал решение (или даже кого-то с той же проблемой). Я никогда не разбирался в компоновке больше, чем обычные библиотеки, поэтому, если вам нужна дополнительная информация, просто спросите.

Заранее спасибо :)

Дополнительная информация:

  • Этот проект был успешно скомпилирован (от Linux до Windows) раньше, и с тех пор я не добавлял / не удалял никаких зависимостей.
  • Моя версия MinGW-w64 - 7.0.0

1 Ответ

0 голосов
/ 09 июля 2020

Итак, я apt-get purge'd mingw-w64 и mingw-w64-common, переустановил только mingw-w64, и теперь он работает ...

Это может иметь какое-то отношение к факту что я следил за проблемой, которую прокомментировал Ричард Криттен (спасибо!), что побудило меня попробовать загрузить и вручную скопировать / вставить заголовки и CRT (mingw-w64-x86_64-headers- git -... & mingw-w64- x86_64-crt- git) из репозитория MSYS2 . Это не сработало сразу (вероятно, потому, что я облажался и использовал версию 5.0.0 вместо своей версии), но, похоже, что-то сработало.

Поэтому для тех, кто наткнулся на эту проблему,

  1. Попробуйте переустановить MinGW (конечно),
  2. Попробуйте вручную добавить CRT и заголовки из предоставленной мной ссылки, и если это все еще не работает,
  3. Попробуйте переустановить MinGW еще раз. Я не очень хорошо знаком с apt, поэтому я не знаю, действительно ли добавление CRT и заголовков изменило способ установки MinGW, но, думаю, стоит попробовать.

Обновление: у меня было это точно такая же проблема в другой системе. Простая переустановка MinGW устранила его, так что, может быть, возникла какая-то проблема с файлами? Возможно, что обновление с более ранней версии что-то испортило. Мораль истории: даже если вы думаете, что ваши файлы в порядке, переустановка не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...