I'm on an OSX 10.10.2 machine, with the latest Rust nightly rustc 1.1.0-dev (aecf3d8b6 2015-05-01) (built 2015-05-01) on a homebuilt version with Android support setup via https://github.com/rust-lang/rust-wiki-backup/blob/master/Doc-building-for-android.md
I'm trying a minimal case with
// lib.rs
#[no_mangle]
pub extern fn double_input(input: i32) -> i32 {
input * 2
}
//thing.c
#include
extern int32_t double_input(int32_t input);
librust.a lib is built using rustc --target=arm-linux-androideabi -C linker=$ANDROID_TOOLCHAIN/bin/arm-linux-androideabi-gcc -C link-args=-pie src/lib.rs --crate-type=staticlib
and linking against my simple project
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := rust_prebuilt
LOCAL_SRC_FILES := librust.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloRust
LOCAL_SRC_FILES := thing.c
LOCAL_STATIC_LIBRARIES += rust_prebuilt
include $(BUILD_SHARED_LIBRARY)
After all those steps, the build process fails during android linkage:
toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:
error: /Users/pakoito/Rust/RustyAndroid/app/src/main/jni/librust.a: no archive symbol table (run ranlib)
collect2: error: ld returned 1 exit status
After running ranlib on the file I get that's empty
$ranlib liblib.a
warning: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: warning for library: liblib.a the table of contents is empty (no object file members in the library define global symbols)
ar t result:
__.SYMDEF SORTED
lib.o
r-morestack-morestack.o
r-compiler-rt-absvdi2.o
r-compiler-rt-absvsi2.o
r-compiler-rt-absvti2.o
r-compiler-rt-adddf3.o
r-compiler-rt-adddf3vfp.o
r-compiler-rt-addsf3.o
r-compiler-rt-addsf3vfp.o
r-compiler-rt-addvdi3.o
r-compiler-rt-addvsi3.o
r-compiler-rt-addvti3.o
r-compiler-rt-aeabi_dcmp.o
r-compiler-rt-aeabi_fcmp.o
r-compiler-rt-aeabi_idivmod.o
r-compiler-rt-aeabi_ldivmod.o
r-compiler-rt-aeabi_memcmp.o
r-compiler-rt-aeabi_memcpy.o
r-compiler-rt-aeabi_memmove.o
r-compiler-rt-aeabi_memset.o
r-compiler-rt-aeabi_uidivmod.o
r-compiler-rt-aeabi_uldivmod.o
r-compiler-rt-apple_versioning.o
r-compiler-rt-ashldi3.o
r-compiler-rt-ashlti3.o
r-compiler-rt-ashrdi3.o
r-compiler-rt-ashrti3.o
r-compiler-rt-bswapdi2.o
r-compiler-rt-bswapsi2.o
r-compiler-rt-clear_cache.o
r-compiler-rt-clzdi2.o
r-compiler-rt-clzsi2.o
r-compiler-rt-clzti2.o
r-compiler-rt-cmpdi2.o
r-compiler-rt-cmpti2.o
r-compiler-rt-comparedf2.o
r-compiler-rt-comparesf2.o
r-compiler-rt-comparetf2.o
r-compiler-rt-ctzdi2.o
r-compiler-rt-ctzsi2.o
r-compiler-rt-ctzti2.o
r-compiler-rt-divdc3.o
r-compiler-rt-divdf3.o
r-compiler-rt-divdf3vfp.o
r-compiler-rt-divdi3.o
r-compiler-rt-divmoddi4.o
r-compiler-rt-divmodsi4.o
r-compiler-rt-divsc3.o
r-compiler-rt-divsf3.o
r-compiler-rt-divsf3vfp.o
r-compiler-rt-divsi3.o
r-compiler-rt-divti3.o
r-compiler-rt-divxc3.o
r-compiler-rt-eprintf.o
r-compiler-rt-eqdf2vfp.o
r-compiler-rt-eqsf2vfp.o
r-compiler-rt-extendsfdf2.o
r-compiler-rt-extendsfdf2vfp.o
r-compiler-rt-ffsdi2.o
r-compiler-rt-ffsti2.o
r-compiler-rt-fixdfdi.o
r-compiler-rt-fixdfsi.o
r-compiler-rt-fixdfsivfp.o
r-compiler-rt-fixdfti.o
r-compiler-rt-fixsfdi.o
r-compiler-rt-fixsfsi.o
r-compiler-rt-fixsfsivfp.o
r-compiler-rt-fixsfti.o
r-compiler-rt-fixunsdfdi.o
r-compiler-rt-fixunsdfsi.o
r-compiler-rt-fixunsdfsivfp.o
r-compiler-rt-fixunsdfti.o
r-compiler-rt-fixunssfdi.o
r-compiler-rt-fixunssfsi.o
r-compiler-rt-fixunssfsivfp.o
r-compiler-rt-fixunssfti.o
r-compiler-rt-fixunsxfdi.o
r-compiler-rt-fixunsxfsi.o
r-compiler-rt-fixunsxfti.o
r-compiler-rt-fixxfdi.o
r-compiler-rt-fixxfti.o
r-compiler-rt-floatdidf.o
r-compiler-rt-floatdisf.o
r-compiler-rt-floatdixf.o
r-compiler-rt-floatsidf.o
r-compiler-rt-floatsidfvfp.o
r-compiler-rt-floatsisf.o
r-compiler-rt-floatsisfvfp.o
r-compiler-rt-floattidf.o
r-compiler-rt-floattisf.o
r-compiler-rt-floattixf.o
r-compiler-rt-floatundidf.o
r-compiler-rt-floatundisf.o
r-compiler-rt-floatundixf.o
r-compiler-rt-floatunsidf.o
r-compiler-rt-floatunsisf.o
r-compiler-rt-floatunssidfvfp.o
r-compiler-rt-floatunssisfvfp.o
r-compiler-rt-floatuntidf.o
r-compiler-rt-floatuntisf.o
r-compiler-rt-floatuntixf.o
r-compiler-rt-gcc_personality_v0.o
r-compiler-rt-gedf2vfp.o
r-compiler-rt-gesf2vfp.o
r-compiler-rt-gtdf2vfp.o
r-compiler-rt-gtsf2vfp.o
r-compiler-rt-int_util.o
r-compiler-rt-ledf2vfp.o
r-compiler-rt-lesf2vfp.o
r-compiler-rt-lshrdi3.o
r-compiler-rt-lshrti3.o
r-compiler-rt-ltdf2vfp.o
r-compiler-rt-ltsf2vfp.o
r-compiler-rt-moddi3.o
r-compiler-rt-modsi3.o
r-compiler-rt-modti3.o
r-compiler-rt-muldc3.o
r-compiler-rt-muldf3.o
r-compiler-rt-muldf3vfp.o
r-compiler-rt-muldi3.o
r-compiler-rt-mulodi4.o
r-compiler-rt-mulosi4.o
r-compiler-rt-muloti4.o
r-compiler-rt-mulsc3.o
r-compiler-rt-mulsf3.o
r-compiler-rt-mulsf3vfp.o
r-compiler-rt-multi3.o
r-compiler-rt-mulvdi3.o
r-compiler-rt-mulvsi3.o
r-compiler-rt-mulvti3.o
r-compiler-rt-mulxc3.o
r-compiler-rt-nedf2vfp.o
r-compiler-rt-negdf2.o
r-compiler-rt-negdf2vfp.o
r-compiler-rt-negdi2.o
r-compiler-rt-negsf2.o
r-compiler-rt-negsf2vfp.o
r-compiler-rt-negti2.o
r-compiler-rt-negvdi2.o
r-compiler-rt-negvsi2.o
r-compiler-rt-negvti2.o
r-compiler-rt-nesf2vfp.o
r-compiler-rt-paritydi2.o
r-compiler-rt-paritysi2.o
r-compiler-rt-parityti2.o
r-compiler-rt-popcountdi2.o
r-compiler-rt-popcountsi2.o
r-compiler-rt-popcountti2.o
r-compiler-rt-powidf2.o
r-compiler-rt-powisf2.o
r-compiler-rt-powitf2.o
r-compiler-rt-powixf2.o
r-compiler-rt-restore_vfp_d8_d15_regs.o
r-compiler-rt-save_vfp_d8_d15_regs.o
r-compiler-rt-subdf3.o
r-compiler-rt-subdf3vfp.o
r-compiler-rt-subsf3.o
r-compiler-rt-subsf3vfp.o
r-compiler-rt-subvdi3.o
r-compiler-rt-subvsi3.o
r-compiler-rt-subvti3.o
r-compiler-rt-switch16.o
r-compiler-rt-switch32.o
r-compiler-rt-switch8.o
r-compiler-rt-switchu8.o
r-compiler-rt-sync_synchronize.o
r-compiler-rt-trampoline_setup.o
r-compiler-rt-truncdfsf2.o
r-compiler-rt-truncdfsf2vfp.o
r-compiler-rt-ucmpdi2.o
r-compiler-rt-ucmpti2.o
r-compiler-rt-udivdi3.o
r-compiler-rt-udivmoddi4.o
r-compiler-rt-udivmodsi4.o
r-compiler-rt-udivmodti4.o
r-compiler-rt-udivsi3.o
r-compiler-rt-udivti3.o
r-compiler-rt-umoddi3.o
r-compiler-rt-umodsi3.o
r-compiler-rt-umodti3.o
r-compiler-rt-unorddf2vfp.o
r-compiler-rt-unordsf2vfp.o
r-std-std-4e7c5e5c.o
r-std-r-rust_builtin-rust_builtin.o
r-std-r-rust_builtin-rust_android_dummy.o
r-std-r-backtrace-atomic.o
r-std-r-backtrace-dwarf.o
r-std-r-backtrace-fileline.o
r-std-r-backtrace-posix.o
r-std-r-backtrace-print.o
r-std-r-backtrace-sort.o
r-std-r-backtrace-state.o
r-std-r-backtrace-backtrace.o
r-std-r-backtrace-simple.o
r-std-r-backtrace-elf.o
r-std-r-backtrace-mmapio.o
r-std-r-backtrace-mmap.o
r-std-r-rustrt_native-rust_try.o
r-std-r-rustrt_native-record_sp.o
r-collections-collections-4e7c5e5c.o
r-rustc_unicode-rustc_unicode-4e7c5e5c.o
r-rand-rand-4e7c5e5c.o
r-alloc-alloc-4e7c5e5c.o
r-alloc-r-jemalloc-jemalloc.pic.o
r-alloc-r-jemalloc-arena.pic.o
r-alloc-r-jemalloc-atomic.pic.o
r-alloc-r-jemalloc-base.pic.o
r-alloc-r-jemalloc-bitmap.pic.o
r-alloc-r-jemalloc-chunk.pic.o
r-alloc-r-jemalloc-chunk_dss.pic.o
r-alloc-r-jemalloc-chunk_mmap.pic.o
r-alloc-r-jemalloc-ckh.pic.o
r-alloc-r-jemalloc-ctl.pic.o
r-alloc-r-jemalloc-extent.pic.o
r-alloc-r-jemalloc-hash.pic.o
r-alloc-r-jemalloc-huge.pic.o
r-alloc-r-jemalloc-mb.pic.o
r-alloc-r-jemalloc-mutex.pic.o
r-alloc-r-jemalloc-prof.pic.o
r-alloc-r-jemalloc-quarantine.pic.o
r-alloc-r-jemalloc-rtree.pic.o
r-alloc-r-jemalloc-stats.pic.o
r-alloc-r-jemalloc-tcache.pic.o
r-alloc-r-jemalloc-util.pic.o
r-alloc-r-jemalloc-tsd.pic.o
r-alloc-r-jemalloc-valgrind.pic.o
r-libc-libc-4e7c5e5c.o
r-core-core-4e7c5e5c.o
Result of $ANDROID_TOOLCHAIN/bin/arm-linux-androideabi-nm lib.o
U _GLOBAL_OFFSET_TABLE_
00000000 t _ZN12double_input10__rust_abiE
U _ZN9panicking5panic20h0c7496eebc6bd7aapLyE
U __aeabi_unwind_cpp_pr0
U __morestack
00000000 r const782
00000000 T double_input
00000000 d panic_loc786
00000000 r str783
00000000 r str785