Commits

Romain Vernoux committed a876f1a

Current personal build.

  • Participants
  • Parent commits df39b06

Comments (0)

Files changed (6)

 * Requirements:
-  - Android NDK, r5b http://developer.android.com/sdk/ndk/index.html
-  
   You must put files in following locations: 
   - in jni/ :
     - libcamlrun.a for Android archtecture

File jni/Android.mk

-# EDIT BELOW
-OCAMLANDROID_PREFIX=/Users/keigoi/usr/android-ocaml
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE    := ocamltop
-LOCAL_SRC_FILES := libocamltop.c start.c
-LOCAL_CFLAGS    := -std=c99 -I$(OCAMLANDROID_PREFIX)/lib/ocaml 
-LOCAL_LDLIBS := -llog $(NDK_APP_PROJECT_PATH)/jni/libcamlrun.a
-
+# EDIT BELOW
+OCAMLANDROID_PREFIX=C:/users/romain/caml/
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_MODULE    := ocamltop
+LOCAL_SRC_FILES := libocamltop.c start.c
+LOCAL_CFLAGS    := -std=c99 -I$(OCAMLANDROID_PREFIX)/lib/ocaml 
+LOCAL_LDLIBS := -llog jni/libcamlrun.a
+
 include $(BUILD_SHARED_LIBRARY)

File jni/libcamlrun.a

Binary file added.
+>>>> Android.mk <<<<
+
+# EDIT BELOW
+OCAMLANDROID_PREFIX=C:/users/romain/caml
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_MODULE    := ocamltop
+LOCAL_SRC_FILES := libocamltop.c start.c
+LOCAL_CFLAGS    := -std=c99 -I$(OCAMLANDROID_PREFIX)/lib/ocaml/ 
+LOCAL_LDLIBS := -llog
+LOCAL_STATIC_LIBRARIES    := libcamlrun
+
+/cygdrive/c/users/romain/desktop/keigoi2/obj/local/armeabi/libcamlrun.a:
+	mkdir -p C:/users/romain/desktop/keigoi2/obj/local/armeabi/
+	cp $(OCAMLANDROID_PREFIX)/lib/ocaml/libcamlrun.a C:/users/romain/desktop/keigoi2/obj/local/armeabi/
+
+include $(BUILD_SHARED_LIBRARY)
+
+<<<< Android.mk >>>>
+
+
+/* It's a little tricky on Windows (I have to use Cygwin to emulate Linux)
+The windows-style paths are "C:\xxx" which are translated by Cygwin in linux-styled paths : "/cygdrive/c/xxx" 
+If I define OCAMLANDROID_PREFIX with cygwin paths, I get an error : "caml/values.h : no such file or directory"
+With the Windows-styled path it works.
+If I define "/cygdrive/c/users/romain/desktop/keigoi2/obj/local/armeabi/libcamlrun.a:" with windows path, I get an error.
+With the Cygwin-styled path it works.
+Well, doesn't work so well : */
+
+
+---------------------------------------------------
+
+
+>>>> ndk-build V=1 > log.txt 2>&1 <<<<
+
+rm -f /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi/lib*.so /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi-v7a/lib*.so /cygdrive/c/users/romain/desktop/keigoi2/libs/x86/lib*.so
+rm -f /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi/gdbserver /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi-v7a/gdbserver /cygdrive/c/users/romain/desktop/keigoi2/libs/x86/gdbserver
+rm -f /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi/gdb.setup /cygdrive/c/users/romain/desktop/keigoi2/libs/armeabi-v7a/gdb.setup /cygdrive/c/users/romain/desktop/keigoi2/libs/x86/gdb.setup
+SharedLibrary  : libocamltop.so
+/cygdrive/c/Progra~2/Android/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-g++ -Wl,-soname,libocamltop.so -shared --sysroot=C:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/start.o  C:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm/usr/lib/libc.so C:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm/usr/lib/libstdc++.so C:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm/usr/lib/libm.so   -Wl,--no-undefined -Wl,-z,noexecstack -LC:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm/usr/lib -llog -Wl,-rpath-link=C:/Progra~2/Android/android-ndk-r5b/platforms/android-3/arch-arm/usr/lib -lsupc++ -o C:/users/romain/desktop/keigoi2/obj/local/armeabi/libocamltop.so
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o: In function `caml_startup':
+C:/users/romain/desktop/keigoi2/jni/libocamltop.c:56822: undefined reference to `caml_startup_code'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x0): undefined reference to `caml_alloc_dummy'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x4): undefined reference to `caml_alloc_dummy_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x8): undefined reference to `caml_update_dummy'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xc): undefined reference to `caml_array_get_addr'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x10): undefined reference to `caml_array_get_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x14): undefined reference to `caml_array_get'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x18): undefined reference to `caml_array_set_addr'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1c): undefined reference to `caml_array_set_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x20): undefined reference to `caml_array_set'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x24): undefined reference to `caml_array_unsafe_get_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x28): undefined reference to `caml_array_unsafe_get'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2c): undefined reference to `caml_array_unsafe_set_addr'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x30): undefined reference to `caml_array_unsafe_set_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x34): undefined reference to `caml_array_unsafe_set'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x38): undefined reference to `caml_make_vect'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3c): undefined reference to `caml_make_array'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x40): undefined reference to `caml_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x44): undefined reference to `caml_equal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x48): undefined reference to `caml_notequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x4c): undefined reference to `caml_lessthan'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x50): undefined reference to `caml_lessequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x54): undefined reference to `caml_greaterthan'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x58): undefined reference to `caml_greaterequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x5c): undefined reference to `caml_output_value'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x60): undefined reference to `caml_output_value_to_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x64): undefined reference to `caml_output_value_to_buffer'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x68): undefined reference to `caml_format_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x6c): undefined reference to `caml_float_of_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x70): undefined reference to `caml_int_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x74): undefined reference to `caml_float_of_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x78): undefined reference to `caml_neg_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x7c): undefined reference to `caml_abs_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x80): undefined reference to `caml_add_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x84): undefined reference to `caml_sub_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x88): undefined reference to `caml_mul_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x8c): undefined reference to `caml_div_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x90): undefined reference to `caml_exp_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x94): undefined reference to `caml_floor_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x98): undefined reference to `caml_fmod_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x9c): undefined reference to `caml_frexp_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xa0): undefined reference to `caml_ldexp_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xa4): undefined reference to `caml_log_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xa8): undefined reference to `caml_log10_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xac): undefined reference to `caml_modf_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xb0): undefined reference to `caml_sqrt_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xb4): undefined reference to `caml_power_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xb8): undefined reference to `caml_sin_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xbc): undefined reference to `caml_sinh_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xc0): undefined reference to `caml_cos_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xc4): undefined reference to `caml_cosh_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xc8): undefined reference to `caml_tan_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xcc): undefined reference to `caml_tanh_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xd0): undefined reference to `caml_asin_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xd4): undefined reference to `caml_acos_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xd8): undefined reference to `caml_atan_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xdc): undefined reference to `caml_atan2_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xe0): undefined reference to `caml_ceil_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xe4): undefined reference to `caml_expm1_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xe8): undefined reference to `caml_log1p_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xec): undefined reference to `caml_eq_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xf0): undefined reference to `caml_neq_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xf4): undefined reference to `caml_le_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xf8): undefined reference to `caml_lt_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0xfc): undefined reference to `caml_ge_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x100): undefined reference to `caml_gt_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x104): undefined reference to `caml_float_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x108): undefined reference to `caml_classify_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x10c): undefined reference to `caml_gc_stat'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x110): undefined reference to `caml_gc_quick_stat'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x114): undefined reference to `caml_gc_counters'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x118): undefined reference to `caml_gc_get'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x11c): undefined reference to `caml_gc_set'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x120): undefined reference to `caml_gc_minor'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x124): undefined reference to `caml_gc_major'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x128): undefined reference to `caml_gc_full_major'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x12c): undefined reference to `caml_gc_major_slice'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x130): undefined reference to `caml_gc_compaction'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x134): undefined reference to `caml_hash_univ_param'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x138): undefined reference to `caml_input_value'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x13c): undefined reference to `caml_input_value_from_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x140): undefined reference to `caml_marshal_data_size'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x144): undefined reference to `caml_int_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x148): undefined reference to `caml_int_of_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x14c): undefined reference to `caml_format_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x150): undefined reference to `caml_int32_neg'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x154): undefined reference to `caml_int32_add'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x158): undefined reference to `caml_int32_sub'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x15c): undefined reference to `caml_int32_mul'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x160): undefined reference to `caml_int32_div'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x164): undefined reference to `caml_int32_mod'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x168): undefined reference to `caml_int32_and'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x16c): undefined reference to `caml_int32_or'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x170): undefined reference to `caml_int32_xor'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x174): undefined reference to `caml_int32_shift_left'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x178): undefined reference to `caml_int32_shift_right'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x17c): undefined reference to `caml_int32_shift_right_unsigned'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x180): undefined reference to `caml_int32_of_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x184): undefined reference to `caml_int32_to_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x188): undefined reference to `caml_int32_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x18c): undefined reference to `caml_int32_to_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x190): undefined reference to `caml_int32_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x194): undefined reference to `caml_int32_format'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x198): undefined reference to `caml_int32_of_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x19c): undefined reference to `caml_int32_bits_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1a0): undefined reference to `caml_int32_float_of_bits'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1a4): undefined reference to `caml_int64_neg'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1a8): undefined reference to `caml_int64_add'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1ac): undefined reference to `caml_int64_sub'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1b0): undefined reference to `caml_int64_mul'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1b4): undefined reference to `caml_int64_div'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1b8): undefined reference to `caml_int64_mod'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1bc): undefined reference to `caml_int64_and'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1c0): undefined reference to `caml_int64_or'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1c4): undefined reference to `caml_int64_xor'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1c8): undefined reference to `caml_int64_shift_left'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1cc): undefined reference to `caml_int64_shift_right'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1d0): undefined reference to `caml_int64_shift_right_unsigned'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1d4): undefined reference to `caml_int64_of_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1d8): undefined reference to `caml_int64_to_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1dc): undefined reference to `caml_int64_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1e0): undefined reference to `caml_int64_to_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1e4): undefined reference to `caml_int64_of_int32'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1e8): undefined reference to `caml_int64_to_int32'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1ec): undefined reference to `caml_int64_of_nativeint'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1f0): undefined reference to `caml_int64_to_nativeint'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1f4): undefined reference to `caml_int64_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1f8): undefined reference to `caml_int64_format'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x1fc): undefined reference to `caml_int64_of_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x200): undefined reference to `caml_int64_bits_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x204): undefined reference to `caml_int64_float_of_bits'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x208): undefined reference to `caml_nativeint_neg'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x20c): undefined reference to `caml_nativeint_add'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x210): undefined reference to `caml_nativeint_sub'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x214): undefined reference to `caml_nativeint_mul'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x218): undefined reference to `caml_nativeint_div'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x21c): undefined reference to `caml_nativeint_mod'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x220): undefined reference to `caml_nativeint_and'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x224): undefined reference to `caml_nativeint_or'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x228): undefined reference to `caml_nativeint_xor'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x22c): undefined reference to `caml_nativeint_shift_left'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x230): undefined reference to `caml_nativeint_shift_right'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x234): undefined reference to `caml_nativeint_shift_right_unsigned'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x238): undefined reference to `caml_nativeint_of_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x23c): undefined reference to `caml_nativeint_to_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x240): undefined reference to `caml_nativeint_of_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x244): undefined reference to `caml_nativeint_to_float'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x248): undefined reference to `caml_nativeint_of_int32'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x24c): undefined reference to `caml_nativeint_to_int32'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x250): undefined reference to `caml_nativeint_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x254): undefined reference to `caml_nativeint_format'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x258): undefined reference to `caml_nativeint_of_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x25c): undefined reference to `caml_ml_open_descriptor_in'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x260): undefined reference to `caml_ml_open_descriptor_out'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x264): undefined reference to `caml_ml_out_channels_list'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x268): undefined reference to `caml_channel_descriptor'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x26c): undefined reference to `caml_ml_close_channel'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x270): undefined reference to `caml_ml_channel_size'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x274): undefined reference to `caml_ml_channel_size_64'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x278): undefined reference to `caml_ml_set_binary_mode'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x27c): undefined reference to `caml_ml_flush_partial'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x280): undefined reference to `caml_ml_flush'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x284): undefined reference to `caml_ml_output_char'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x288): undefined reference to `caml_ml_output_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x28c): undefined reference to `caml_ml_output_partial'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x290): undefined reference to `caml_ml_output'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x294): undefined reference to `caml_ml_seek_out'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x298): undefined reference to `caml_ml_seek_out_64'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x29c): undefined reference to `caml_ml_pos_out'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2a0): undefined reference to `caml_ml_pos_out_64'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2a4): undefined reference to `caml_ml_input_char'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2a8): undefined reference to `caml_ml_input_int'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2ac): undefined reference to `caml_ml_input'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2b0): undefined reference to `caml_ml_seek_in'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2b4): undefined reference to `caml_ml_seek_in_64'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2b8): undefined reference to `caml_ml_pos_in'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2bc): undefined reference to `caml_ml_pos_in_64'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2c0): undefined reference to `caml_ml_input_scan_line'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2c4): undefined reference to `caml_lex_engine'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2c8): undefined reference to `caml_new_lex_engine'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2cc): undefined reference to `caml_md5_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2d0): undefined reference to `caml_md5_chan'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2d4): undefined reference to `caml_get_global_data'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2d8): undefined reference to `caml_get_section_table'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2dc): undefined reference to `caml_reify_bytecode'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2e0): undefined reference to `caml_realloc_global'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2e4): undefined reference to `caml_get_current_environment'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2e8): undefined reference to `caml_invoke_traced_function'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2ec): undefined reference to `caml_static_alloc'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2f0): undefined reference to `caml_static_free'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2f4): undefined reference to `caml_static_release_bytecode'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2f8): undefined reference to `caml_static_resize'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x2fc): undefined reference to `caml_obj_is_block'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x300): undefined reference to `caml_obj_tag'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x304): undefined reference to `caml_obj_set_tag'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x308): undefined reference to `caml_obj_block'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x30c): undefined reference to `caml_obj_dup'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x310): undefined reference to `caml_obj_truncate'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x314): undefined reference to `caml_obj_add_offset'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x318): undefined reference to `caml_lazy_follow_forward'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x31c): undefined reference to `caml_lazy_make_forward'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x320): undefined reference to `caml_get_public_method'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x324): undefined reference to `caml_parse_engine'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x328): undefined reference to `caml_set_parser_trace'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x32c): undefined reference to `caml_install_signal_handler'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x330): undefined reference to `caml_ml_string_length'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x334): undefined reference to `caml_create_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x338): undefined reference to `caml_string_get'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x33c): undefined reference to `caml_string_set'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x340): undefined reference to `caml_string_equal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x344): undefined reference to `caml_string_notequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x348): undefined reference to `caml_string_compare'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x34c): undefined reference to `caml_string_lessthan'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x350): undefined reference to `caml_string_lessequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x354): undefined reference to `caml_string_greaterthan'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x358): undefined reference to `caml_string_greaterequal'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x35c): undefined reference to `caml_blit_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x360): undefined reference to `caml_fill_string'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x364): undefined reference to `caml_is_printable'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x368): undefined reference to `caml_bitvect_test'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x36c): undefined reference to `caml_sys_exit'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x370): undefined reference to `caml_sys_open'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x374): undefined reference to `caml_sys_close'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x378): undefined reference to `caml_sys_file_exists'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x37c): undefined reference to `caml_sys_is_directory'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x380): undefined reference to `caml_sys_remove'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x384): undefined reference to `caml_sys_rename'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x388): undefined reference to `caml_sys_chdir'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x38c): undefined reference to `caml_sys_getcwd'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x390): undefined reference to `caml_sys_getenv'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x394): undefined reference to `caml_sys_get_argv'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x398): undefined reference to `caml_sys_system_command'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x39c): undefined reference to `caml_sys_time'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3a0): undefined reference to `caml_sys_random_seed'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3a4): undefined reference to `caml_sys_get_config'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3a8): undefined reference to `caml_sys_read_directory'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3ac): undefined reference to `caml_terminfo_setup'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3b0): undefined reference to `caml_terminfo_backup'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3b4): undefined reference to `caml_terminfo_standout'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3b8): undefined reference to `caml_terminfo_resume'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3bc): undefined reference to `caml_register_named_value'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3c0): undefined reference to `caml_weak_create'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3c4): undefined reference to `caml_weak_set'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3c8): undefined reference to `caml_weak_get'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3cc): undefined reference to `caml_weak_get_copy'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3d0): undefined reference to `caml_weak_check'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3d4): undefined reference to `caml_weak_blit'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3d8): undefined reference to `caml_final_register'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3dc): undefined reference to `caml_final_release'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3e0): undefined reference to `caml_ensure_stack_capacity'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3e4): undefined reference to `caml_dynlink_open_lib'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3e8): undefined reference to `caml_dynlink_close_lib'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3ec): undefined reference to `caml_dynlink_lookup_symbol'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3f0): undefined reference to `caml_dynlink_add_primitive'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3f4): undefined reference to `caml_dynlink_get_current_libs'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3f8): undefined reference to `caml_record_backtrace'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x3fc): undefined reference to `caml_backtrace_status'
+C:/users/romain/desktop/keigoi2/obj/local/armeabi/objs/ocamltop/libocamltop.o:(.data.rel+0x400): undefined reference to `caml_get_exception_backtrace'
+collect2: ld returned 1 exit status
+make: *** [/cygdrive/c/users/romain/desktop/keigoi2/obj/local/armeabi/libocamltop.so] Error 1
+
+
+/* It doesn't seem to be a problem with libcamlrun.a ? */

File res/layout/main.xml

     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:gravity="fill_vertical"
+    android:layout_marginBottom="10dip"
     >
 <EditText
     android:id="@+id/input"
     android:layout_height="wrap_content"
     android:singleLine="true" 
     />
-<WebView  
-    android:id="@+id/output"
-    android:layout_width="fill_parent" 
-    android:layout_height="fill_parent" 
-    />
+<ScrollView
+	android:id="@+id/scrollview"
+	android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+	android:layout_marginTop="10dip"
+    android:layout_marginLeft="10dip"
+    android:layout_marginRight="10dip"
+    android:layout_marginBottom="10dip">
+    
+	<TextView  
+	    android:id="@+id/output"
+	    android:layout_width="fill_parent" 
+	    android:layout_height="wrap_content"
+	    android:layout_marginBottom="10dip"
+	    />
+</ScrollView>
 </LinearLayout>

File src/jp/co/itpl/ocamlandroid/MainActivity.java

+/*	CHANGES 
+ 
+ 02/03/11 
+ - Webview -> TextView 
+ - Threads -> Asynctask : Cf the BackThread class at the bottom of the file 
+ - "in" is now a class attribute as Backthread needs it
+ - jsescape is now useless, as the TextView contains a string.
+ - console_output_forever and beginToplevel are now contained in BackThread.
+ 
+ 03/03/11
+ - Old code related to the webview deleted
+ - Scrolling in println
+*/
+
+/*   TO DO
+ 
+ - Cleaning
+ - Orientation Changes are crashing the app (we have to keep the Backthread alive during such process) 
+ - Separate the User Input Screen from the Caml Output Screen (two tabs ?)
+ - Fix the Copy Function
+
+*/
+
+
+/* NOTES & COMMENTS
+ 
+ Why Asynctask ?
+ 	-> They are running in a separate thread and permit to access datas from the UI Thread.
+ 	-> We can thus easily modify (TextView outView) from another thread : cool !
+ 	-> Didn't have time to try, but it is apparently easy to keep such threads alive during change orientation.
+ 	
+ Why a Runnable to scroll ?
+ 	-> Our backthread is sending updates very fast to the UI Thread.
+ 	Sometimes, a new update arrives before the previous scroll has finished
+ 	Then, we have to queue the scroll process with a runnable, or else the screen won't scroll
+ 	and the last lines will appear under the bottom of the screen.
+ 
+ */
+
+
 package jp.co.itpl.ocamlandroid;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.nio.CharBuffer;
 
 import android.app.Activity;
 import android.app.Dialog;
 import android.graphics.Color;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
+import android.view.View;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.widget.EditText;
+import android.widget.ScrollView;
 import android.widget.TextView;
 import android.widget.Toast;
 
 	public static final int MENU_CLEAR = 2;
 	public static final int MENU_ABOUT = 3;
 	public static final String TAG = "ocaml-android";
-	public static final String SCROLL_JS = "setTimeout(function(){window.scrollTo(0,9999);},0);"; // FIXME! 
 	
-	private WebView outView; // we use WebView for output so that we easily get copying-capability
+	private EditText edit;
+	private TextView outView; 
+	private ScrollView scrollView;
 	volatile PrintWriter out = null;
+	private InputStream in = null;
+	private CharBuffer text = null;
 
-	private static String jsescape(String line) {
-		return line.replace("\\", "\\\\").replace("'", "\\'").replace("\n", "\\n"); // FIXME
+	
+	public void println(String line) { 
+		Log.d(TAG, "console output:"+line);
+		outView.setText(outView.getText().toString().concat(line));
+		scrollView.post(new Runnable() { 
+		    public void run() { 
+		        scrollView.scrollTo(0, outView.getHeight()); 
+		    } 
+		}); 
+		edit.requestFocus();
+	}
+
+	private void clear() { 
+		Log.d(TAG, "console clear");
+		outView.setText("");
 	}
 	
-	private void println(String line) {
-		Log.d(TAG, "console output:"+line);
-		outView.loadUrl("javascript:document.getElementById('output').innerHTML+='"+ jsescape(line) + "';"
-				+SCROLL_JS);
-	}
-
-	private void clear() {
-		Log.d(TAG, "console clear");
-		outView.loadUrl("javascript:document.getElementById('output').innerHTML='';");
-	}
-	
-	private void console_output_forever(final WebView outView, final InputStream in) {
-		new Thread() {
-			public void run() {
-				try {
-					while (true) {
-						int i = in.read();
-						if(i==-1) {
-							break;
-						}
-						int len = in.available();
-						byte[] b = new byte[len+1];
-						b[0] = (byte)(i <= 127 ? i : i - 256);
-						in.read(b, 1, len);
-						println(new String(b,"utf-8"));
-					}
-				} catch (IOException e) {
-					Log.e(TAG, "reading stdout/stderr error", e);
-				}
-			}
-		}.start();
-	}
-
-	
-	private void beginToplevel() {
-		try {
-			OcamlTop ocaml = new OcamlTop(this);
-			console_output_forever(outView, ocaml.stream.getInputStream());
-
-			out = new PrintWriter(new OutputStreamWriter(
-					ocaml.stream.getOutputStream(), "utf-8"));
-		} catch (IOException e) {
-			Log.e(TAG, "error in main", e);
-		}
-	}
 	
 	
 	@Override
 	public void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.main);
-		outView = (WebView) findViewById(R.id.output);
-		WebSettings webSettings = outView.getSettings();
-		webSettings.setJavaScriptEnabled(true);
-		webSettings.setCacheMode(WebSettings.LOAD_NORMAL);
-		webSettings.setDefaultFontSize(10);
-		outView.setBackgroundColor(Color.BLACK);
-		outView.loadData("<pre style='color:#C0C0C0' id='output'></pre>",
-				"text/html", "utf-8");
+		outView = (TextView) findViewById(R.id.output);
+		scrollView = (ScrollView) findViewById(R.id.scrollview);
 		
-		EditText edit = (EditText)findViewById(R.id.input);
+		edit = (EditText)findViewById(R.id.input);
 		edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
 			public boolean onEditorAction(TextView view, int arg1, KeyEvent arg2) {
 				if(out!=null && !"".equals(view.getText().toString().trim())) {
 			}
 		});
 		edit.requestFocus();
-		
-		new Thread() {public void run() {beginToplevel();}}.start();
-
+		new BackThread().execute(); 
 	}
 
 	@Override
-	public void onResume() {
+	public void onResume() { 	
 		super.onResume();
 		IS01FullScreen.invoke();
 	}
 
 	@Override
-	public boolean onCreateOptionsMenu(Menu menu) {
+	public boolean onCreateOptionsMenu(Menu menu) { 
 		super.onCreateOptionsMenu(menu);
 
 		menu.add(Menu.NONE, MENU_COPY, Menu.NONE, R.string.copy);
 	}
 
 	@Override
-	public boolean onOptionsItemSelected(MenuItem item) {
+	public boolean onOptionsItemSelected(MenuItem item) { 
 		switch (item.getItemId()) {
 		case MENU_COPY:
 			try {
 			return super.onOptionsItemSelected(item);
 		}
 	}
+	
+	
+	
+	
+	private class BackThread extends AsyncTask<Void,String,Void> { // NEW
+
+		@Override
+		protected void onPreExecute(){
+			try {
+				OcamlTop ocaml = new OcamlTop(MainActivity.this);
+				in = ocaml.stream.getInputStream();
+				
+				out = new PrintWriter(new OutputStreamWriter(
+						ocaml.stream.getOutputStream(), "utf-8"));
+			} catch (IOException e) {
+				Log.e(TAG, "error in main", e);
+			}
+		}
+		
+		@Override
+		protected Void doInBackground(Void... params) {
+			// TODO Auto-generated method stub
+			try {
+				while (true) {
+					int i = in.read();
+					if(i==-1) {
+						break;
+					}
+					int len = in.available();
+					byte[] b = new byte[len+1];
+					b[0] = (byte)(i <= 127 ? i : i - 256);
+					in.read(b, 1, len);
+					publishProgress(new String(b,"utf-8"));
+										 
+				}
+			} catch (IOException e) {
+				Log.e("ocaml-android", "reading stdout/stderr error", e); //FIXME
+			}
+			return null;  
+		}
+			
+		@Override
+		protected void onProgressUpdate(String... strings){
+			println(strings[0]);
+		}
+	}
+	
 }