Issue linking versioned .so library via build.rs

Hi!

I'm currently trying to use a C library in my rust project, but have never worked with linking C library to Rust and googling my issues didn't yield much.

This is my build.rs:

fn main() {
    println!("cargo:rustc-link-search=native=./libs/x64lib-linux");

    let libs = [
        "crypto",
        "idkit",
         ...
    ];
    for lib in libs.iter() {
        println!("cargo:rustc-link-lib={}", lib);
    }
}

./libs/x64lib-linux looks like this via ls ./libs/x64lib-linux -l:

... libcrypto.so -> ./libcrypto.so.0.9.8
... libcrypto.so.0.9.8
... libidkit.so -> ./libidkit.so.2
... libidkit.so.2
    ...

The issue is, when rust tries to link libraries, I'm getting error:
/usr/bin/ld: ./libs/x64lib-linux/libidkit.so: undefined reference to MD5@OPENSSL_0.9.8

So far I've tried:

  1. In build.rs changing crypto to :libcrypto.so.0.9.8 which should generate -l:libcrypto.so.0.9.8 flag, but this gives me error:
error: library name must not be empty
  1. In build.rs changing crypto to crypto:libcrypto.so.0.9.8, but this gives me error:
error: renaming of the library `crypto` was specified, however this crate contains no `#[link(...)]` attributes referencing this library

What does ldd ./libs/x64lib-linux/libidkit.so show?

The output of ldd ./libs/x64lib-linux/libidkit.so:

linux-vdso.so.1 (0x00007ffd5e74d000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f40847e1000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f40847d9000)
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00007f40840b1000)
libcrypto.so.0.9.8 => not found
libiomp5.so => not found
libusb-0.1.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f4083e79000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f4083d91000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f40847b9000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f4083ba9000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f4084811000)

Libraries libiomp5.so and libusb-0.1.so.4 were left out in initial post, because it's the same situation, so kept it simple.

If I do LD_LIBRARY_PATH=./libs/x64lib-linux/ ldd ./libs/x64lib-linux/libidkit.so:

./libs/x64lib-linux/libidkit.so: ./libs/x64lib-linux/libcrypto.so.0.9.8: no version information available (required by ./libs/x64lib-linux/libidkit.so)
linux-vdso.so.1 (0x00007fff0a16d000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f6d9f689000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f6d9f681000)
libsqlite3.so.0 => ./libs/x64lib-linux/libsqlite3.so.0 (0x00007f6d9ec00000)
libcrypto.so.0.9.8 => ./libs/x64lib-linux/libcrypto.so.0.9.8 (0x00007f6d9e800000)
libiomp5.so => ./libs/x64lib-linux/libiomp5.so (0x00007f6d9e400000)
libusb-0.1.so.4 => ./libs/x64lib-linux/libusb-0.1.so.4 (0x00007f6d9e000000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f6d9ddc1000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f6d9f599000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f6d9efd9000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f6d9e219000)
libusb-1.0.so.0 => /usr/lib/libusb-1.0.so.0 (0x00007f6d9efb9000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f6d9f6b9000)
libudev.so.1 => /usr/lib/libudev.so.1 (0x00007f6d9ef81000)

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.