Comments (14)
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.
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.
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.
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.
I also did as you said. Same results. I blame NDK 25.
Btw, I am on WSL on Windows 11.
from jni-rs.
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.
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.
$ rustc --version
rustc 1.67.0 (fc594f156 2023-01-24)
$ cargo ndk --version
cargo-ndk 2.10.1
from jni-rs.
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.
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.
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.
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.
@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.
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)
- how to cache JClass to avoid expensive lookups? HOT 3
- Make the JNI lib name configurable? HOT 4
- What does the correct class descriptor format looks like for `find_class`? HOT 2
- Implement `std::iter::Iter` on arrays? HOT 1
- Create a replacement for `ndk-context` just for sharing a `JavaVM` pointer between modular / orthogonal crates HOT 1
- Is it safe to have multiple versions of the `jni` crate in use within a single application? HOT 1
- Add Android target[s] to CI
- JNIEnv::get_object_array_element requires &mut self HOT 2
- Example request: `call_method` with non-primitive type as parameters. HOT 4
- TryFrom<char> for `char` primitive HOT 7
- 0.21 mutability requirements on `JNIEnv` methods break use of `catch_unwind` HOT 16
- Nested "critical sections" disallowed by borrow checker HOT 1
- Provide ways to use `CallNonvirtual*Method` in `JNIEnv` HOT 1
- Converting between types in JNI code HOT 2
- `AttachGuard` detaches too soon when dropped out of order HOT 2
- how to use call_static_method_unchecked with a GlobalRef to a class? HOT 2
- how to get java list on rust HOT 2
- CallNonvirtual<type>Method support request HOT 2
- Can i load native function on exec self ? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jni-rs.