Github工作流没有为i686-pc-windows-gnu目标构建Rust项目

ncecgwcz  于 2023-04-12  发布在  Git
关注(0)|答案(1)|浏览(183)

我有一个github工作流程,可以自动化为i686-pc-windows-gnu目标构建rust应用程序的过程,但是它一直给我这个错误:

error: linking with `i686-w64-mingw32-gcc` failed: exit status: 1
  |
  =
  = note: /usr/bin/i686-w64-mingw32-ld: cannot find -lgpgme: No such file or directory
          /usr/bin/i686-w64-mingw32-ld: cannot find -lgpg-error: No such file or directory
          /usr/bin/i686-w64-mingw32-ld: cannot find -lassuan: No such file or directory
          /usr/bin/i686-w64-mingw32-ld: cannot find -lgpg-error: No such file or directory
          collect2: error: ld returned 1 exit status
          

error: could not compile `todolist` due to previous error
Error: Process completed with exit code 101.

我的项目使用的是gpgme Rust crate,下面是我的github工作流程:

name: Build for i686-pc-windows-gnu

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target: [i686-pc-windows-gnu]

    steps:
    - uses: actions/checkout@v2
    - name: Install mingw-w64 toolchain
      run: sudo apt-get install -y mingw-w64
    - name: Install gpgme dependencies
      run: |
        sudo dpkg --add-architecture i386
        sudo apt-get -y update
        sudo apt-get -y update && sudo apt-get install -y software-properties-common
        sudo add-apt-repository universe
        sudo add-apt-repository multiverse
        sudo apt-get -y update

        sudo apt-get install -y libgpgme-dev:i386 libgpgme11-dev:i386 libassuan-dev:i386 libgpg-error-dev:i386

    - name: Set up Rust toolchain
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        override: ${{ matrix.target }}

    - name: Build project
      run: |
        rustup target add i686-pc-windows-gnu
        export PKG_CONFIG_ALLOW_CROSS=1
        export PKG_CONFIG_SYSROOT_DIR=$(rustc --print sysroot --target ${{ matrix.target }})
        export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
        export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig

        cargo build --target ${{ matrix.target }}

我试着检查/usr//usr/lib/i386-linux-gnu目录是否存在,它确实存在。

6vl6ewon

6vl6ewon1#

您已经安装了libgpgme依赖项,但是是针对Ubuntu i386架构的(i386-pc-linux-gnu),不适用于Windows(i686-pc-windows-gnu)。尽管使用相同的体系结构,但您不能在Windows上使用Linux共享库,因为(a)系统调用不同,并且(B)对象格式不同。Linux系统使用ELF可执行文件和共享库,Windows使用PE格式,除非你使用Wine之类的东西,这两个不能一起工作。
如果你想链接到这些库的Windows版本,你需要以某种方式提供它们,然后在链接时指定它们的位置,可能需要一个合适的build.rs文件来指示正确的参数。

相关问题