Code Monkey home page Code Monkey logo

Comments (14)

rib avatar rib commented on September 27, 2024 1

Glad you were able to at least get it compiling ok on Windows. Not sure how come you were hitting trouble on Linux but I also guess that whatever the issue was, it's probably something more general with the toolchain setup and not a jni issue.

from jni-rs.

rib avatar rib commented on September 27, 2024

You can maybe look at using cargo ndk to cross compile for Android.

E.g.

cargo install cargo-ndk
cd jni-rs/example/mylib
cargo ndk -t aarch64-linux-android build

To run this on Android though you would also have to adapt the HelloWorld.java code e.g. into an Android Activity and use something like Gradle to package that along with the mylib library.

If you'd just like to see a more minimal example of using JNI on Android you might want to take a look at:

https://github.com/rust-mobile/rust-android-examples/tree/main/na-subclass-jni

or

https://github.com/rust-mobile/cargo-apk/blob/main/examples/examples/jni_audio.rs

Hope that helps

from jni-rs.

xclud avatar xclud commented on September 27, 2024

Still i get almost the same error:

> cargo ndk -t aarch64-linux-android build
[2023-02-22T09:34:22Z INFO  cargo_ndk::cli] Using NDK at path: /mnt/d/build-tools/linux/android-sdk/ndk (ANDROID_NDK_HOME)
[2023-02-22T09:34:22Z INFO  cargo_ndk::cli] NDK API level: 21
[2023-02-22T09:34:22Z INFO  cargo_ndk::cli] Building targets: arm64-v8a
[2023-02-22T09:34:22Z INFO  cargo_ndk::cli] Building arm64-v8a (aarch64-linux-android)
   Compiling proc-macro2 v1.0.51
   Compiling quote v1.0.23
   Compiling syn v1.0.107
   Compiling memchr v2.5.0
   Compiling log v0.4.17
   Compiling combine v4.6.6
   Compiling thiserror-impl v1.0.38
   Compiling thiserror v1.0.38
   Compiling jni v0.21.0
   Compiling mylib v0.1.0 (/mnt/d/projects/pub/mylib)
error: linking with `/mnt/d/build-tools/linux/android-sdk/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang` failed: exit status: 1
  |
  = note: "/mnt/d/build-tools/linux/android-sdk/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" "-Wl,--version-script=/tmp/rustceKi5fz/list" "/tmp/rustceKi5fz/symbols.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.10k8q7iwor6anm5p.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.12k85tpre8aue4mq.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.135alsxs41nqe14q.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.13h5q0gf1v32qcgu.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.13z47t480x7la8uz.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.14a4ut92wc76fg9t.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.14wc365yrpuu31eu.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.17r7g50xwghoa1by.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.189nd4l38cx9rknc.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.19hhxnvdhhas2vk4.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1b3kxixr0x9l9rs.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1e7cm6lu5kryebpf.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1es30ysfkjhelnqu.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1g7a27n6mvm4mdtl.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1hgb88owyjbahgdt.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1jxglzzcfi5xdsue.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1kbzs2v7ie31kczv.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1lpvzg37w38dqm5b.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1o41cxckecdu5w5c.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1qiyqn71w1vq4q4u.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1u25tajk952d9ipe.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1vahqxwnawczmwft.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1wsxvxghxbj9jjcz.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1x8rmukhsimhta7v.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1ymxe3cedcmlcyg6.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1zsbfhj6osnidqa4.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2097e0ekh735im3n.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.21wa8bner1krcv93.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.22pplj9zrgzgt4oy.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.25q35m1dohpoiohk.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.263vcuc1s7s1pz2d.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.27hnag9146jspug9.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.28gxsl2mc7y6upa7.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2ap5onbbxzb2jqu2.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2ed1np4v6680iuex.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2eiuzhonca6drfip.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2fp5nq3iz8zzgegj.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2h6vo9u4u54swytr.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2jhizpimd894a4xf.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2kif9ra7z7qdwwrx.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2nggsooaybw47wuv.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.2o95aawqfkm0z6yw.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.333jw83d3xx9889y.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.34yk7mmi6yzl14zg.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.374t3260fzfgle7l.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.37865h1rakkssknr.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.38st264nn9i7l5tq.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3cgef1km093trbmk.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3cj4hxjgquf05vn9.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3d6683wvgidiqshy.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3m4krhez6pdpiv09.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3mu2ocvucfzupfym.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3nfspjd0mi248p7s.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3te7cf5p7wjc0o66.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.3yl3fketwgqi3lw8.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.47gbii0rd1cyyrro.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.492f8z3zx5uivdpz.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4a57jvzmassn8ddm.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4blpzws4846ud92l.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4cy1nizgncewvnwo.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4hxcqsjd0mqyxagx.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4lzhsolzeoq2f25r.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4re39poi39lm0y1z.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4rml5j5zjt065q3k.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4uwk5g0nydujd14i.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4vu80w0z6d21h4da.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4w9hb1d7r37856js.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4wvps3ctqf674ea8.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.4zq5naknz5255n4i.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.50bttsks7st2px72.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.50mtifjqwovyzudi.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.52xm4o674o4ph37s.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.56h7u0yr3nxg9zej.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.5aaosrke3ontrnui.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.5cvba1ushsmpidnv.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.5grrputtb615mzm0.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.7knuq42jd41fkan.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.84yzsadgn12vd8i.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.8cf0rw0d0n8xeza.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.9ioiutj8iry5iuj.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.aflmgdvj0gm3bii.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.aidqky4quboqf1d.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.annlxi461i47aas.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.d43ycpseyg9m6pb.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.imvmba68lkfo0np.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.iu4tksaqo4b9c6p.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.iwfi8hjxnyt96yc.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.k2bpkf3s944elv2.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.kqy3vb5uu50l3do.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.ldhe77ao21ki4yr.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.n3u9bf9mlodk5vy.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.qco7tomrr25chj7.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.tw842wmkae9n5h4.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.upniqezq98o5d6n.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.wmwk8lau79aaux2.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.xwjmlgnhgdu2roj.rcgu.o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/mylib.1ldhe6c171bu2zgb.rcgu.o" "-Wl,--as-needed" "-L" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps" "-L" "/mnt/d/projects/pub/mylib/target/debug/deps" "-L" "/mnt/d/projects/pub/mylib/target/cargo-ndk/libgcc-workaround" "-L" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-Wl,-Bstatic" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libjni-22ba19228250a1c3.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libcesu8-6b828e21bb4d0d1b.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/liblog-3e0222cf4a4e5e30.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libcfg_if-fa14f6f4c52b07b0.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libcombine-3171825f7fffcc7a.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libmemchr-90ec3adbe33c6623.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libbytes-8d37288d2aa64bbd.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libthiserror-0d013b16003c739c.rlib" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libjni_sys-6c1c3b072bdcea86.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libstd-836aa825e952fb4d.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libpanic_unwind-7974078da156c70e.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libobject-280f36369587709d.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libmemchr-1c42f883482b22e2.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libaddr2line-9f90386a9bd74f11.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libgimli-7ad41c57dc967d7e.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_demangle-17d65a8756292a3a.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libstd_detect-4c2968c54456d8b9.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libhashbrown-c37de69224549d4d.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libminiz_oxide-6cbad0d4d5516633.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libadler-d065f80daad00afd.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_alloc-ad388382bb396f15.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libunwind-9c9b3d96363ab23e.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcfg_if-3a2d32e4cfda71d6.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/liblibc-64d16db683fa9f30.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/liballoc-104a9562377a1486.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/librustc_std_workspace_core-ed9a701e38dc6d7b.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcore-3da6e6e8c6106424.rlib" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib/libcompiler_builtins-60bcd280e935af09.rlib" "-Wl,-Bdynamic" "-ldl" "-llog" "-lgcc" "-ldl" "-lm" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/mahdi/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-linux-android/lib" "-o" "/mnt/d/projects/pub/mylib/target/aarch64-linux-android/debug/deps/libmylib.so" "-Wl,--gc-sections" "-shared" "-Wl,-zrelro,-znow" "-nodefaultlibs"
  = note: clang-14: error: no input files
          

error: could not compile `mylib` due to previous error
[2023-02-22T09:34:51Z INFO  cargo_ndk::cli] If the build failed due to a missing target, you can run this command:
[2023-02-22T09:34:51Z INFO  cargo_ndk::cli] 
[2023-02-22T09:34:51Z INFO  cargo_ndk::cli]     rustup target install aarch64-linux-android
> rustup target install aarch64-linux-android
info: component 'rust-std' for target 'aarch64-linux-android' is up to date

I have latest NDK (version 25) installed.

from jni-rs.

rib avatar rib commented on September 27, 2024

Oh, curious. I tested the commands I posted before sending and was able to cross compile mylib.

I see you've got mylib split out into a separate project under /mnt/d/projects/pub/mylib/target and wonder if you can fetch a clean clone of the jni-rs repo, master branch and build in situ under example/mylib just to double check we are building the same version.

I was using a relatively old ndk when I built yesterday: 21.1.6352462

maybe later I can give a newer ndk version a try too.

from jni-rs.

xclud avatar xclud commented on September 27, 2024

I also did as you said. Same results. I blame NDK 25.

Btw, I am on WSL on Windows 11.

from jni-rs.

rib avatar rib commented on September 27, 2024

I wouldn't usually be surprised if there's an NDK toolchain issue (that does crop up from time to time if the toolchain breaks some assumption that was being relied on) but r25 isn't particularly new at this point so I'd have thought I'd have stumbled across that too.

E.g. one issue in the past was with the removal of libunwind that the rust std library links against where it was necessary to create a linker script to point at libgcc (which tools like cargo ndk and cargo apk now handle automatically)

For reference; I was also testing on Windows, WSL (Windows 10 in my case)

from jni-rs.

rib avatar rib commented on September 27, 2024

Okey, I just installed the latest r25 NDK via Android Studio and was still able to build mylib:

$ cargo ndk -t aarch64-linux-android build
[2023-02-22T14:01:54Z INFO  cargo_ndk::cli] Using NDK at path: C:\Users\Robert\AppData\Local\Android\Sdk\ndk\25.2.9519653 (ANDROID_NDK_HOME)
[2023-02-22T14:01:54Z INFO  cargo_ndk::cli] NDK API level: 21
[2023-02-22T14:01:54Z INFO  cargo_ndk::cli] Building targets: arm64-v8a
[2023-02-22T14:01:54Z INFO  cargo_ndk::cli] Building arm64-v8a (aarch64-linux-android)
   Compiling proc-macro2 v1.0.50
   Compiling quote v1.0.23
   Compiling unicode-ident v1.0.6
   Compiling syn v1.0.107
   Compiling memchr v2.5.0
   Compiling thiserror v1.0.38
   Compiling log v0.4.17
   Compiling cfg-if v1.0.0
   Compiling bytes v1.3.0
   Compiling jni-sys v0.3.0
   Compiling cesu8 v1.1.0
   Compiling combine v4.6.6
   Compiling thiserror-impl v1.0.38
   Compiling jni v0.21.0 (C:\Users\Robert\src\jni-rs)
   Compiling mylib v0.1.0 (C:\Users\Robert\src\jni-rs\example\mylib)
    Finished dev [unoptimized + debuginfo] target(s) in 10.88s

from jni-rs.

rib avatar rib commented on September 27, 2024
$ rustc --version
rustc 1.67.0 (fc594f156 2023-01-24)

$ cargo ndk --version
cargo-ndk 2.10.1

from jni-rs.

xclud avatar xclud commented on September 27, 2024

Still i have no luck. I am trying to use Ubuntu instead of WSL. Will let you know if it works.

$rustc --version
rustc 1.67.1 (d5a82bbd2 2023-02-07)

$ cargo ndk --version
cargo-ndk 2.12.6

from jni-rs.

xclud avatar xclud commented on September 27, 2024

Meantime, I was able to build the project on my Windows host (not WSL).

$ cargo ndk -t aarch64-linux-android build --release
[2023-02-23T17:49:59Z INFO  cargo_ndk::cli] Using NDK at path: D:\build-tools\android-sdk\ndk\25.2.9519653 (NDK_HOME)
[2023-02-23T17:49:59Z INFO  cargo_ndk::cli] NDK API level: 21
[2023-02-23T17:49:59Z INFO  cargo_ndk::cli] Building targets: arm64-v8a
[2023-02-23T17:49:59Z INFO  cargo_ndk::cli] Building arm64-v8a (aarch64-linux-android)
   Compiling proc-macro2 v1.0.51
   Compiling unicode-ident v1.0.6
   Compiling quote v1.0.23
   Compiling syn v1.0.107
   Compiling memchr v2.5.0
   Compiling thiserror v1.0.38
   Compiling log v0.4.17
   Compiling cfg-if v1.0.0
   Compiling bytes v1.4.0
   Compiling cesu8 v1.1.0
   Compiling jni-sys v0.3.0
   Compiling combine v4.6.6
   Compiling thiserror-impl v1.0.38
   Compiling jni v0.21.0 (D:\projects\jni-rs)
   Compiling mylib v0.1.0 (D:\projects\jni-rs\example\mylib)
    Finished release [optimized] target(s) in 15.05s

Now I have my libmylib.so, I am wondering if this is the file I need to put in my Android project? I mean if there is any difference between cross compiling from Windows or Linux machine?

from jni-rs.

rib avatar rib commented on September 27, 2024

Oh, actually, I just realized I said I was using WSL when I tested this but actually I wasn't, I was just running within a Git Bash shell not WSL - sorry for the confusion.

from jni-rs.

rib avatar rib commented on September 27, 2024

Now I have my libmylib.so, I am wondering if this is the file I need to put in my Android project? I mean if there is any difference between cross compiling from Windows or Linux machine?

yeah, it makes no difference how you cross compiled it (from Windows proper, WSL or Linux etc), yep it's the libmylib.so you want.

cargo ndk also has a -o option that's useful for this which will copy the .so with a standard target ABI directory structure.

E.g. cargo ndk -t aarch64-linux-android -o app/src/main/jniLibs/ build
would automatically copy target/aarch64-linux-android/debug/libmylib.so to app/src/main/jniLibs/arm64-v8a/libmylib.so

(See the added arm64-v8a/ directory)

This is typically how you would organize Android shared libraries for different architectures before packaging them into an .apk

from jni-rs.

xclud avatar xclud commented on September 27, 2024

@rib My problem is now solved by cross compiling from Windows. I gave up Linux.

Thank you for your support. I let this issue open as it is still valid. You may want to close it anytime.

from jni-rs.

rib avatar rib commented on September 27, 2024

Out of curiosity I just tried building mylib on Linux (WSL2, Ubuntu 22.04) and it seemed to cross compile ok for me with ndk r25c:

rib@DESKTOP-MET143R:~/src/jni-rs/example/mylib$ cargo ndk -t aarch64-linux-android build
[2023-02-24T23:33:04Z INFO  cargo_ndk::cli] Using NDK at path: /home/rib/src/android-ndk-r25c (ANDROID_NDK_HOME)
[2023-02-24T23:33:04Z INFO  cargo_ndk::cli] NDK API level: 21
[2023-02-24T23:33:04Z INFO  cargo_ndk::cli] Building targets: arm64-v8a
[2023-02-24T23:33:04Z INFO  cargo_ndk::cli] Building arm64-v8a (aarch64-linux-android)
   Compiling proc-macro2 v1.0.51
   Compiling cfg-if v1.0.0
   Compiling bytes v1.4.0
   Compiling jni-sys v0.3.0
   Compiling cesu8 v1.1.0
   Compiling quote v1.0.23
   Compiling syn v1.0.109
   Compiling memchr v2.5.0
   Compiling thiserror v1.0.38
   Compiling log v0.4.17
   Compiling combine v4.6.6
   Compiling thiserror-impl v1.0.38
   Compiling jni v0.21.0 (/home/rib/src/jni-rs)
   Compiling mylib v0.1.0 (/home/rib/src/jni-rs/example/mylib)
    Finished dev [unoptimized + debuginfo] target(s) in 8.71s
rib@DESKTOP-MET143R:~/src/jni-rs/example/mylib$ rustc --version
rustc 1.67.1 (d5a82bbd2 2023-02-07)
rib@DESKTOP-MET143R:~/src/jni-rs/example/mylib$ cargo ndk --version
cargo-ndk 2.12.6

from jni-rs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.