tonistiigi / xx

Dockerfile cross-compilation helpers
MIT License
338 stars 29 forks source link

crti.o error when cross building to linux/amd64 #123

Closed 0xalex88 closed 9 months ago

0xalex88 commented 9 months ago

I'm trying to build from arm mac to amd64, this is my Dockerfile

FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx

FROM --platform=$BUILDPLATFORM rust:1.72-alpine AS builder

COPY --from=xx / /
RUN apk add --update --no-cache clang lld
ARG TARGETPLATFORM

RUN xx-apk add --update --no-cache pkgconf openssl-dev openssl-libs-static xx-cxx-essentials xx-c-essentials
WORKDIR /app
COPY . .

RUN xx-cargo build --release --target-dir ./build && \
    xx-verify ./build/$(xx-cargo --print-target-triple)/release/myapp

however I'm getting error

8.722 error: linking with `cc` failed: exit status: 1
8.722   |
8.722   = note: LC_ALL="C" PATH="/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/bin:/usr/local/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" VSLANG="1033" "cc" "-Wl,--version-script=/tmp/rustcrnHWhH/list" "-Wl,--no-undefined-version" "/tmp/rustcrnHWhH/symbols.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.00.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.01.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.02.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.03.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.04.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.05.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.06.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.07.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.08.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.rustversion.b42d4fc6a9e585a1-cgu.09.rcgu.o" "/app/./build/release/deps/rustversion-45caf256a5b1157d.v07b23alknc5pwk.rcgu.rmeta" "/app/./build/release/deps/rustversion-45caf256a5b1157d.1g4q1izjb5srsc1x.rcgu.o" "-Wl,--as-needed" "-L" "/app/./build/release/deps" "-L" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-Wl,-Bstatic" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libproc_macro-79235d7eda7d2297.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libstd-2ad8dcade37f4a90.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libpanic_unwind-979572faa2a17916.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libobject-93508898bcfc3702.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libmemchr-ab66446b81463d74.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libaddr2line-6083b516af549008.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libgimli-2389476f2626efb6.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/librustc_demangle-97faebafc321e964.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libstd_detect-e8ac812a6dab364e.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libhashbrown-dde0af57b0f2901e.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/librustc_std_workspace_alloc-8df52c7f042aeffd.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libminiz_oxide-8789ebd13f9e0a12.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libadler-cb238a2d7c01ef75.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libunwind-0ebf8faa9e79b9cc.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libcfg_if-73698e09b48b4cfd.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/liblibc-3f7bca623c41b752.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/liballoc-11ab57860e7dd426.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/librustc_std_workspace_core-7ffd2525fa6ce213.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libcore-e91e1df47a197349.rlib" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/libcompiler_builtins-5b084770a5817f4e.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib" "-o" "/app/./build/release/deps/librustversion-45caf256a5b1157d.so" "-Wl,--gc-sections" "-shared" "-Wl,-z,relro,-z,now" "-nodefaultlibs"
8.722   = note: /usr/lib/gcc/aarch64-alpine-linux-musl/12.2.1/../../../../aarch64-alpine-linux-musl/bin/ld: cannot find crti.o: No such file or directory
8.722           collect2: error: ld returned 1 exit status

it seems it's not finding the crti.o which should be installed by xx-c-essentials since it should be in the musl-dev package right?

Update: a quick find shows two files:

/usr/local/rustup/toolchains/1.72.0-aarch64-unknown-linux-musl/lib/rustlib/aarch64-unknown-linux-musl/lib/self-contained/crti.o /x86_64-alpine-linux-musl/usr/lib/crti.o

0xalex88 commented 9 months ago

Found the problem, had to move musl-dev at the top (non xx-apk one)