Я пытаюсь добавить код Rust в образец андроида NDK (native-activity); Всякий раз, когда я связываю код Rust (скомпилированный как .a) в .so, он не запускается.
Я продолжал получать информацию отсюда, чтобы получить компилятор ржавчины, зависящий от android, и "автономная инструментальная цепочка", https://github.com/mozilla/rust/wiki/Doc-building-for-android
Кто-то предлагал на канале IRR Rust, что я должен упомянуть "большой палец" где-то; есть ли возможность перейти к rustc, или мне нужно было все это по-другому в первую очередь?
Я, конечно, смог вызвать ржавчину и c из eachother на настольных сборках.
Есть ли образец, в котором у кого-то есть код ржавчины, работающий в .apk; это должно быть просто.. очень сложно расшифровать make файлы для сложных проектов. (Я думаю, было бы очень сложно понять это из чтения Серво-источника)
Я проверил, что этот процесс генерирует полезный пакет без добавления ржавчины; он не запускается, если я свяжу незастроенный код ржавчины, даже если он не достигнут (хотя ссылка не говорит мне, что что-то не так). Если я удалю вызов "rusty_android()", он будет работать. Если я переведу вызов на rusty_android до точки, которая не достигнута, она все равно не работает. Я могу проверить с помощью "nm", что "rusty_android" находится в .so... unmangled.
Это мой текущий процесс сборки: его взяли из образца собственной активности android; Я добавил исходный файл ржавчины с одним extern functin, возвращающим значение, и попытался отладить печать, которая из исходных образцов C main
ANDROID_CXX = /opt/ndk_standalone/bin/arm-linux-androideabi-gcc
android:
$(ANDROID_CXX) -I/home/ME/android-ndk-r9b/sources/android/native_app_glue -c jni/main.c -o obj/local/armeabi/objs/native-activity/main.o
rustc --target=arm-linux-androideabi hello_android.rs -C android-cross-path=/opt/ndk_standalone --crate-type=staticlib -o rusty_android.a
$(ANDROID_CXX) -shared -o libs/armeabi/libnative-activity.so obj/local/armeabi/objs/native-activity/main.o obj/local/armeabi/libandroid_native_app_glue.a another.o rusty_android.a -llog -landroid -lEGL -lGLESv1_CM
ant debug
adb install -r bin/NativeActivity-debug.apk
adb shell am start -n com.example.native_activity/android.app.NativeActivity
hello_android.rs:-
use std::libc;
#[no_mangle]
pub extern fn rusty_android()->libc::c_int {
99 as libc::c_int
}
in main.c, inserted in android_main(..):-
{ extern int rusty_android(); LOGI("****rust says %d****", rusty_android()); }
Подозрение о том, что что-то конкретное "большой палец" может потребоваться, возникло в результате сравнения источников LLVM IR и asm, но кажется странным, что это будет дополнительная опция, требуемая сверх "arm-linux-androideabi"