gcc -m32 不适用于 Windows 托管代理

时间:2021-05-24 12:18:06

标签: windows gcc azure-pipelines

我使用 vs2017-win2016 映像在托管代理上创建了一个简单的 Azure DevOps 管道:

  1. 准备 C 文件 [PowerShell 任务]:

    New-Item "test.c" -ItemType File -Value "int Foo() { return 123; }"
    
  2. 构建 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 或类似方式(即通过自动化工具)安装所需的软件。

2 个答案:

答案 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."