#windows #gcc #azure-pipelines
Вопрос:
Я создал простой конвейер Azure DevOps на размещенном агенте с изображением vs2017-win2016:
- Подготовка файла C [задача PowerShell]:
New-Item "test.c" -ItemType File -Value "int Foo() { return 123; }"
- Сборка DLL [задача командной строки]:
gcc -v -c test.c -m32 gcc -v -shared -o test.dll test.o -m32
Но второй шаг не удался с:
C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibuser32.a при поиске-luser32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libuser32.a при поиске-luser32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-luser32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libkernel32.a при поиске-lkernel32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibkernel32.a при поиске-lkernel32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libkernel32.a при поиске-lkernel32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lkernel32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libiconv.a при поиске-liconv C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibiconv.a при поиске-liconv C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libiconv.a при поиске-liconv C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-liconv C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmingw32.a при поиске-lmingw32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibmingw32.a при поиске-lmingw32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmingw32.a при поиске-lmingw32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lmingw32 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libgcc_s.a при поиске-lgcc_s C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibgcc_s.a при поиске-lgcc_s C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libgcc_s.a при поиске-lgcc_s C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lgcc_s C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/libgcc.a при поиске-lgcc C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0libgcc.a при поиске-lgcc C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/libgcc.a при поиске-lgcc C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lgcc C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmoldname.a при поиске-lmoldname C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibmoldname.a при поиске-lmoldname C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmoldname.a при поиске-lmoldname C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lmoldname C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmingwex.a при поиске-lmingwex C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibmingwex.a при поиске-lmingwex C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmingwex.a при поиске-lmingwex C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lmingwex C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmsvcrt.a при поиске-lmsvcrt C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/liblibmsvcrt.a при поиске-lmsvcrt C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: пропуск несовместимых C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/lib/libmsvcrt.a при поиске-lmsvcrt C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: не удается найти-lmsvcrt
collect2.exe: ошибка: ld вернул 1 статус выхода
Я полагаю, что что-то неправильно настроено с помощью MinGW на размещенных агентах, что приводит к -m32
невозможности использования опции, и, следовательно, невозможно создать 32-разрядную DLL с помощью gcc.
В Интернете есть ряд вопросов по аналогичной проблеме, но я не могу понять из них, что именно мне нужно сделать в 64-разрядной Windows, чтобы заставить gcc работать с переключателем-m32 и создавать 32-разрядную DLL.
Если я использую Azure DevOps, было бы здорово установить необходимое программное обеспечение с помощью choco
или что-то в этом роде, то есть с помощью инструментов автоматизации.
Ответ №1:
В агентах Windows, размещенных в Microsoft, предустановленный MinGW Mingw-w64 8.1.0
не MinGW32
установлен.
Для установки MinGW32
на агенты, размещенные в Microsoft, необходимо выполнить некоторые связанные командные строки в конвейере. Я искал и пробовал, но не нашел ни одной доступной команды, которую можно было бы использовать для установки MinGW в Windows.
В качестве обходного пути, возможно, вы можете попробовать вручную установить MinGW32
на локальном компьютере с Windows, а затем добавить автономный агент на локальном компьютере с Windows для запуска конвейера.
Вы можете обратиться к следующей статье, чтобы установить MinGW в Windows:
Комментарии:
1. Значит
-m32
, опция работает только в том случае, если установлен MinGW32? Насколько я знаю, он устарел, и поддерживается только MinGW64, который должен создавать двоичные файлы как 32 -, так и 64-разрядные.2. Также по журналам есть пути, такие как
C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/x86_64-w64-mingw32/bin
, похоже, mingw32 присутствует, но по какой-то причине не работает.
Ответ №2:
Как сказал Брайт Ран-MSFT, на размещенных агентах не установлен MinGW32. Автономные агенты-это не вариант для меня.
После нескольких часов поиска и пробования различных решений я, наконец, нашел решение. Существует проект под названием winlibs, который содержит все компиляторы, включая i686, которые могут создавать 32-разрядные библиотеки DLL в 64-разрядной Windows.
Таким образом, я получил этот сценарий PowerShell в своем конвейере:
Write-Host "Downloading winlibs..."
Invoke-WebRequest -Uri "https://github.com/brechtsanders/winlibs_mingw/releases/download/11.1.0-12.0.0-9.0.0-r1/winlibs-i686-posix-dwarf-gcc-11.1.0-mingw-w64-9.0.0-r1.zip" -OutFile "winlibs.zip"
Write-Host "Downloaded."
Write-Host "Extracting winlibs..."
Expand-Archive -LiteralPath 'winlibs.zip' -DestinationPath "winlibs"
Write-Host "Extracted."
Write-Host "Building DLL..."
$gccPath = Get-ChildItem -Path "winlibs" -File -Filter "i686-w64-mingw32-gcc.exe" -Recurse
amp; $gccPath.FullName -c test.c -m32
amp; $gccPath.FullName -shared -o test.dll test.o -m32
Write-Host "Built."
Комментарии:
1. Привет @Maxim, Рад, что вы нашли решение, и спасибо, что поделились решением. Я рекомендую вам отметить этот ответ как решение этой темы. Это может быть очень полезно другим людям, которые ищут решение аналогичной проблемы. Спасибо.
2. Спасибо. Пометил ответ.