Closed lattice0 closed 2 years ago
First, I think you want
[lib]
crate_type = ["cdylib"]
After that, my guess is that you are getting tripped up with the special function main
, since that does interact with the C runtime. I'd try exporting a random function name, like:
#[no_mangle]
pub extern "C" fn test_function() {
}
Good luck!
For some reason my .so ends up requiring a link to libc6:
ldd target/x86_64-linux-android/release/libsomething.so
linux-vdso.so.1 (0x00007ffd6478e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff612e8c000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff6130f2000)
I did
fn main() {
println!("cargo:rerun-if-changed=build.rs");
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
// --------- this was previously being called unconditionally. Making it linux-only solved the problem
if target_os == "linux" {
println!("cargo:rustc-link-search=/usr/lib/x86_64-linux-gnu/");
println!("cargo:rustc-link-lib=static=z");
println!("cargo:rustc-link-lib=dylib=dl");
println!("cargo:rustc-link-lib=static=X11");
println!("cargo:rustc-link-lib=dylib=vdpau");
println!("cargo:rustc-link-lib=dylib=va");
println!("cargo:rustc-link-lib=dylib=va-drm");
println!("cargo:rustc-link-lib=dylib=va-x11");
println!("cargo:rustc-link-lib=dylib=xcb");
}
}
I'm getting this strange error:
05-07 17:52:04.502 6044 6044 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libc.so.6" not found: needed by /data/app/~~Uk6xadUW-y6fg0oa4zCCHQ==/com.example.example_app-iwlCB6t4S0WNHQkaW2NUBg==/lib/x86_64/libsomething.so in namespace classloader-namespace
as if the lib were being compiled for linux, not android, based on things I found on the internet about this error. Unfortunately none of them had solutions.
I'm loading like this:
Here's the rustc linking:
Running rustc --crate-name something --edition=2021 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type staticlib --crate-type cdylib --crate-type lib --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=ea3fbc776f8da400 --out-dir /home/dev/project/libsomething/target/x86_64-linux-android/release/deps --target x86_64-linux-android -C linker=/home/dev/project/something_app/build/linker-wrapper/linker-wrapper.sh -L dependency=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps -L dependency=/home/dev/project/libsomething/target/release/deps --extern ascii_table=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libascii_table-67416b3e4c561087.rlib --extern async_smoltcp=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libasync_smoltcp-54f726d304834cc5.rlib --extern downcast_rs=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libdowncast_rs-25ee6a236976a8ba.rlib --extern env_logger=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libenv_logger-f91f74e1e0880e07.rlib --extern etherparse=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libetherparse-cec2146ebd660273.rlib --extern flutter_rust_bridge=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libflutter_rust_bridge-99782acb08a21d78.rlib --extern futures=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libfutures-2e81834c558cb468.rlib --extern libc=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/liblibc-f50b0f21a3e337ac.rlib --extern libopenvpn3=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/liblibopenvpn3-8bfd37ae455e264b.rlib --extern libsomethingprofile_protobuf_rust=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/liblibsomethingprofile_protobuf_rust-c574f7746610eb4b.rlib --extern log=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/liblog-cfe4eef77fe99d24.rlib --extern no_spam=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libno_spam-acb361757b38610d.rlib --extern on_the_fly_swap=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libon_the_fly_swap-6c2c1e5289c91e4a.rlib --extern phf=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libphf-798e5e7bd4ebd202.rlib --extern protobuf=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libprotobuf-97ebf9367ef92dab.rlib --extern rand=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/librand-1201d04ad4e37af4.rlib --extern retina=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libretina-79ba801740c29be2.rlib --extern rsmpeg=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/librsmpeg-7ee02cc125452f37.rlib --extern simple_socket=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libsimple_socket-cd56f31c7a0fb562.rlib --extern simple_vpn=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libsimple_vpn-f0f0c1f93eef39d9.rlib --extern termion=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libtermion-7fb16864cfc0fdb6.rlib --extern thiserror=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libthiserror-abfc7c2458606f5d.rlib --extern tokio=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/libtokio-8e128fa79ddedc20.rlib --extern url=/home/dev/project/libsomething/target/x86_64-linux-android/release/deps/liburl-e0708c24008d89f6.rlib -L /usr/lib/x86_64-linux-gnu/ -l static=z -l dylib=dl -l static=X11 -l dylib=vdpau -l dylib=va -l dylib=va-drm -l dylib=va-x11 -l dylib=xcb -L native=/home/dev/project/libsomething/target/x86_64-linux-android/release/build/libopenvpn3-6763bcfb718b66f5/out -L native=/home/dev/project/build/ffmpeg/build/linux/x86_64_generic/lib/
All my setup can be found at https://github.com/lattice0/flutter_bug/tree/d1c738ac799f0213ac2c1e04c226db0f1058ba23