kornelski / cargo-deb

Make Debian packages directly from Rust/Cargo projects
https://lib.rs/cargo-deb
MIT License
408 stars 48 forks source link

Unable to compile on Mac for Debian #60

Closed brsnik closed 1 year ago

brsnik commented 1 year ago

I'm running MacOS on Intel and getting the following error when I try to compile with targets: aarch64-unknown-linux-gnu, i686-unknown-linux-gnu and x86_64-unknown-linux-gnu.

$ sudo cargo deb --target=x86_64-unknown-linux-gnu
warning: license field is missing in Cargo.toml
   Compiling libc v0.2.137
   Compiling cfg-if v1.0.0
   Compiling parking_lot_core v0.9.4
   Compiling lock_api v0.4.9
   Compiling log v0.4.17
   Compiling smallvec v1.10.0
   Compiling scopeguard v1.1.0
   Compiling serde v1.0.145
   Compiling memchr v2.5.0
   Compiling indexmap v1.9.1
   Compiling hashbrown v0.12.3
   Compiling tokio v1.22.0
   Compiling ryu v1.0.11
   Compiling mio v0.8.5
   Compiling socket2 v0.4.7
   Compiling signal-hook-registry v1.4.0
   Compiling parking_lot v0.12.1
   Compiling num_cpus v1.14.0
   Compiling itoa v1.0.3
   Compiling pin-project-lite v0.2.9
   Compiling unsafe-libyaml v0.2.4
   Compiling bytes v1.2.1
   Compiling serde_yaml v0.9.14
   Compiling demoprj v0.1.0 (/Users/b/o/d/rust/demoprj)
error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m64" "/tmp/rustc5zB91z/symbols.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.0.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.1.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.10.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.11.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.12.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.13.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.14.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.15.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.2.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.3.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.4.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.5.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.6.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.7.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.8.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.server.eaf65156-cgu.9.rcgu.o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a.k84j6jkazra99rc.rcgu.o" "-Wl,--as-needed" "-L" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps" "-L" "/Users/b/o/d/rust/demoprj/target/release/deps" "-L" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libserde_yaml-40a090efcb6e3ca1.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libryu-525bd9b4a541cd1e.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libitoa-a7f49c8af29a3048.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libindexmap-01cff7c36445293e.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libhashbrown-816ca2e34f0825a6.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libunsafe_libyaml-fde97438592a42ff.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libserde-0f92570efc48b240.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libtokio-78e7d69c8b30a7dc.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libsignal_hook_registry-bda84cc3e2cf0248.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libnum_cpus-c27edd3d8290acc6.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libsocket2-7e6e2e63fdbf6338.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libmemchr-da3f0164a4504a7e.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libbytes-07d33d5e9a6840e8.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libmio-8c86ee07666a60ca.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/liblog-2dcd1b97cacb7972.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libpin_project_lite-d035bd2af876e5fe.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libparking_lot-590e841de40d59e8.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libparking_lot_core-8ac6b80dbfa8f66f.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/liblibc-3e87f785f32dccdb.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libcfg_if-c7e466740d7e05f2.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libsmallvec-0326b983044ebf85.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/liblock_api-e2917566a951e90f.rlib" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/libscopeguard-85179ca1007a17a4.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-05737cf45bd30456.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-9f873b61fdec9b03.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-7f13930fcac1846f.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-098633b847612f3b.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-f14b73d282b0245e.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-2c5b4433ebc1d822.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-59591a7b405fe395.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-384947c6d5f697ff.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-b08a86c6880b47a8.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-58adeee671f9ba8e.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-f156b880fc73e7f0.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-4458c5022988e1ab.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-02e61e5ec4aa9e8b.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-a0d9b33b5161957b.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-04cec55a79224c36.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-3fb6d8496dc7d6a6.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-7d46c016841a97d4.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-a1f7b8b60464cc57.rlib" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-272ca28f0b8538d5.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/Users/boris/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/Users/b/o/d/rust/demoprj/target/x86_64-unknown-linux-gnu/release/deps/server-f69841404ba8121a" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs"
  = note: clang: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
          ld: unknown option: --as-needed
          clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: could not compile `demoprj` due to previous error
cargo-deb: build failed
kornelski commented 1 year ago

Unfortunately, cargo is not smart like zig, and does not support cross-compilation of executables out of the box. You have to manually configure a C cross-linker and create and configure a sysroot with Linux's glibc and other C libraries. This is a general design issue with cargo build, not cargo deb.

This is very fiddly and annoying to do on macOS, so I suggest compiling Linux executables in Docker instead.

ximon18 commented 1 year ago

FYI I've been successfully using the cross tool for our projects for a few years now, and I roughly noted my reasons for doing so here.