我使用 vs2017-win2016 映像在托管代理上创建了一个简单的 Azure DevOps 管道:
准备 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/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:跳过不兼容的 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/8.1.0/…/…/…/…/搜索 -luser32 时的 x86_64-w64-mingw32/lib/libuser32.a 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/…/…/…/…/搜索 -lkernel32 时的 x86_64-w64-mingw32/lib/libkernel32.a 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/…/…/…/…/搜索 -lkernel32 时的 x86_64-w64-mingw32/lib\libkernel32.a 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/…/…/…/…/搜索 -lkernel32 时的 x86_64-w64-mingw32/lib/libkernel32.a 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/…/…/…/…/搜索 -liconv 时的 x86_64-w64-mingw32/lib/libiconv.a 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/…/…/…/…/搜索 -liconv 时的 x86_64-w64-mingw32/lib\libiconv.a 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/…/…/…/…/搜索 -liconv 时的 x86_64-w64-mingw32/lib/libiconv.a 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/…/…/…/…/搜索 -lmingw32 时的 x86_64-w64-mingw32/lib/libmingw32.a 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/…/…/…/…/搜索 -lmingw32 时的 x86_64-w64-mingw32/lib\libmingw32.a 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/…/…/…/…/搜索 -lmingw32 时的 x86_64-w64-mingw32/lib/libmingw32.a 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/…/…/…/…/搜索 -lgcc_s 时的 x86_64-w64-mingw32/lib/libgcc_s.a 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/…/…/…/…/搜索 -lgcc_s 时的 x86_64-w64-mingw32/lib\libgcc_s.a 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/…/…/…/…/搜索 -lgcc_s 时的 x86_64-w64-mingw32/lib/libgcc_s.a 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:在搜索 -lgcc 时跳过不兼容的 C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/bin/.../lib/gcc/x86_64-w64-mingw32/8.1.0/libgcc.a 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\libgcc.a 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/libgcc.a 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/…/…/…/…/搜索 -lmoldname 时的 x86_64-w64-mingw32/lib/libmoldname.a 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/…/…/…/…/搜索 -lmoldname 时的 x86_64-w64-mingw32/lib\libmoldname.a 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/…/…/…/…/搜索 -lmoldname 时的 x86_64-w64-mingw32/lib/libmoldname.a 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/…/…/…/…/搜索 -lmingwex 时的 x86_64-w64-mingw32/lib/libmingwex.a 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/…/…/…/…/搜索 -lmingwex 时的 x86_64-w64-mingw32/lib\libmingwex.a 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/…/…/…/…/搜索 -lmingwex 时的 x86_64-w64-mingw32/lib/libmingwex.a 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/…/…/…/…/搜索 -lmsvcrt 时的 x86_64-w64-mingw32/lib/libmsvcrt.a 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/…/…/…/…/搜索 -lmsvcrt 时的 x86_64-w64-mingw32/lib\libmsvcrt.a 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/…/…/…/…/搜索 -lmsvcrt 时的 x86_64-w64-mingw32/lib/libmsvcrt.a 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
选项,因此不可能使用 gcc 构建 32 位 DLL。
网上有很多关于类似问题的问题,但我无法从他们那里理解在 64 位 Windows 上我到底需要做什么才能使 gcc 与 -m32 开关一起工作并构建 32 位 DLL。
因为我使用 Azure DevOps,所以最好通过 choco
或类似方式(即通过自动化工具)安装所需的软件。
答案 0 :(得分:0)
在 Microsoft 托管的 Windows 代理中,预安装的 MinGW 为Mingw-w64 8.1.0
,未安装MinGW32
。
要在 Microsoft 托管的代理上安装 MinGW32
,您需要在管道中执行一些相关的命令行。我搜索并尝试过,但没有找到任何可用的命令可用于在 Windows 上安装 MinGW。
作为一种解决方法,也许您可以尝试在本地 Windows 计算机上手动安装 MinGW32
,然后在本地 Windows 计算机上添加自托管代理来运行管道。 >
您可以参考以下文章在 Windows 上安装 MinGW:
答案 1 :(得分:0)
正如 Bright Ran-MSFT 所说,托管代理上没有安装 MinGW32。自托管代理不适合我。
经过数小时的搜索和尝试不同的解决方案,我终于找到了解决方案。有一个名为 winlibs 的项目,其中包含所有编译器,包括可以在 64 位 Windows 上构建 32 位 DLL 的 i686。
所以我最终在我的管道中使用了这个 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
& $gccPath.FullName -c test.c -m32
& $gccPath.FullName -shared -o test.dll test.o -m32
Write-Host "Built."