我有一个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目录是否存在,它确实存在。
1条答案
按热度按时间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
文件来指示正确的参数。