blas-lapack-rs/blas-lapack-rs.github.io

Linkage failure on linux

Closed this issue · 2 comments

tuxzz commented
[dependencies]
cblas = "*"
netlib-src = { version = "*", default-features = false, features = ["cblas", "system"] }
fn main() {
  let a = vec![1.0f32; 8];
  unsafe { cblas::snrm2(a.len() as i32, &a, 1); }
}

Resulting an error:

$ cargo build                                                                                                                                                 
   Compiling rust-blas v0.1.0 (/home/tuxzz/poc/rust-blas)
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.18qlvp4dbl4s0gj2.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1eahu98ph07316qm.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1ezc2vmv7s5ru7rm.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1fdykw0ac4npa5az.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1h7os38yeevxs5tk.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1ny7ca0iirvbq3pf.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.1ut6nuxidfm8uelo.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.26apgbnaz02wequt.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.26i2bcgq8uwvottg.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.2bxyxtf8mscpmoz.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.2dfltqopn0tunul2.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.2mekxuhytjv4s2bt.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.2q10ri1qca3gwbkf.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.2x0y1ub6177jyter.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.31610v930zn5bu4d.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.32lvrvc909awx003.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.3pifva4lulj6zdz3.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.3qs75y6gblw1jrwq.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.3sy5kc1ixftr3rjd.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.41kc695ic5mo8so.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.46dgsg4ix0xrm5u4.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.4ci7fmysluywoznd.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.4kmpuzaihhewowrj.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.4m3p5kjmjmmlysfi.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.4rq24av4prscqtzk.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.4v91nbbkxdeycv3u.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.53n7k3s5z6jyoqj8.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.5chsw1owog6tyc40.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.5gp3kml6f3w73r56.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.6c7xrb3twfh1tix.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.gnsbyflb6bge5ri.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.niaf3eqw6f20n2d.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.rxf2pmjpoxgbqm8.rcgu.o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.z0csw4x93t50z75.rcgu.o" "-o" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2" "/home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.pzlvo6nkfsaaha9.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/home/tuxzz/poc/rust-blas/target/debug/deps" "-L" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/tuxzz/poc/rust-blas/target/debug/deps/libcblas-7fbd6ed95737cf05.rlib" "/home/tuxzz/poc/rust-blas/target/debug/deps/libnum_complex-886b7a6b2347a0e3.rlib" "/home/tuxzz/poc/rust-blas/target/debug/deps/libnum_traits-8a9b8068cf58520d.rlib" "/home/tuxzz/poc/rust-blas/target/debug/deps/libcblas_sys-394b55ed1fa9dc91.rlib" "/home/tuxzz/poc/rust-blas/target/debug/deps/liblibc-9aeb34673f323208.rlib" "-Wl,--start-group" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-7d65a344221c409b.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-54df1a0c3024f5bd.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-bb312de2a5d7d307.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-60c21d234379de22.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-045480d965da2c45.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-8ec1303a38498da9.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-18658537df359212.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-b87be9f0e57bd4bf.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-3a677d13d4ec517d.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-ac41f78688451395.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-f11f1597d535049a.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-428d15b56101bdc7.rlib" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-941f7f6bc622e313.rlib" "-Wl,--end-group" "/home/tuxzz/.rustup/toolchains/nightly-2020-05-09-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-e77b8f5da9460407.rlib" "-Wl,-Bdynamic" "-lutil" "-ldl" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil"
  = note: /usr/bin/ld: /home/tuxzz/poc/rust-blas/target/debug/deps/rust_blas-6246d4e047004fe2.32lvrvc909awx003.rcgu.o: in function `cblas::snrm2':
          /home/tuxzz/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/cblas-0.2.0/src/lib.rs:194: undefined reference to `cblas_snrm2'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: could not compile `rust-blas`.

To learn more, run the command again with --verbose.

Obviously, there is a -lcblas parameter missing.
Just like evpobr/sndfile-sys#5, only for linux, if we add this

#[link(name = "cblas")]
extern "C" {}

It should be fixed.
The same problem exists in all other packages of blas-lapack-rs.

OS: Archlinux
Rust toolchain: nightly-2020-05-09-x86_64-unknown-linux-gnu
BLAS: cBLAS 3.9.0 (from blis 0.7.0)

tuxzz commented

I have no enough time to fix and test on packages other than cblas-sys, the PR of cblas-sys is coming. Please fix other packages too if you have time.

Hi, I think you simply need to mention netlib-src in the code for the linking to happen. It is explained here.