填一个坑。关于把ruby编译到android上的一个遗留问题。
来源:互联网 发布:mac虚拟机 360优化 编辑:程序博客网 时间:2024/04/29 04:24
恩。如果没记错的话。是好多年前。想把ruby编译到android上运行的问题。我记得那个时候是纠结了一通宵,最后是总算把他跑在了android上。
今天整理一下。
首先 这个教程只限于 ruby1.9.2,为什么?
因为我是过2.1.2。失败!。
首先 先把ruby1.9.2安装上。
./configure
make
sudo make install
一般来讲 = =是没问题的。如果有问题。逐步解决把。这个不在内容内;
首先,重头来看。 其实感觉只要把 gcc 的sysroot 改成NDK中的路径,就应该可以的了。不过事情从是没有那么理想。
./configure
make
出错!。
但是结果是有问题的。 goolge半天,找到了答案。
先做以下变量定义
export NDK_ROOT=~/android-ndk-r9dexport CFLAGS="-march=armv5te -msoft-float " export SYSROOT=$NDK_ROOT/platforms/android-4/arch-armexport CC="$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -mandroid --sysroot=$SYSROOT"
然后有2个补丁文件。
这个是ruby.patch
diff -u -r ruby-1.9.2-p0/configure ruby-1.9.2-p0.android/configure--- ruby-1.9.2-p0/configure2010-08-18 14:56:27.000000000 +0900+++ ruby-1.9.2-p0.android/configure2010-08-19 11:36:01.000000000 +0900@@ -13525,7 +13525,9 @@ $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then :- as_fn_error "cannot check setpgrp when cross compiling" "$LINENO" 5+ #as_fn_error "cannot check setpgrp when cross compiling" "$LINENO" 5+ # hack for Android+ ac_cv_func_setpgrp_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */@@ -15046,7 +15048,10 @@ LDFLAGS="$LDFLAGS -Zomf" ;; #( *) :- : ${LDSHARED='ld'} ;;+# : ${LDSHARED='ld'} ;;+# hack for Android+ : ${LDSHARED='$(CC) -shared'} ;;+ esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rb_cv_dlopen" >&5 $as_echo "$rb_cv_dlopen" >&6; }diff -u -r ruby-1.9.2-p0/dir.c ruby-1.9.2-p0.android/dir.c--- ruby-1.9.2-p0/dir.c2010-08-09 13:39:57.000000000 +0900+++ ruby-1.9.2-p0.android/dir.c2010-08-19 13:17:16.000000000 +0900@@ -700,8 +700,14 @@ static VALUE dir_set_pos(VALUE dir, VALUE pos) {+/* hack for Android*/+#ifdef HAVE_SEEKDIR dir_seek(dir, pos); return pos;+#else+ rb_notimplement();+#endif+ } /*diff -u -r ruby-1.9.2-p0/eval_intern.h ruby-1.9.2-p0.android/eval_intern.h--- ruby-1.9.2-p0/eval_intern.h2010-06-03 18:58:32.000000000 +0900+++ ruby-1.9.2-p0.android/eval_intern.h2010-08-19 11:45:39.000000000 +0900@@ -214,8 +214,12 @@ void rb_trap_restore_mask(void); #ifndef CharNext/* defined as CharNext[AW] on Windows. */+#ifdef __ANDROID__+#define CharNext(p) ((p) + 1)+#else #define CharNext(p) ((p) + mblen(p, RUBY_MBCHAR_MAXSIZE)) #endif+#endif #if defined DOSISH || defined __CYGWIN__ static inline voiddiff -u -r ruby-1.9.2-p0/ext/nkf/nkf-utf8/nkf.h ruby-1.9.2-p0.android/ext/nkf/nkf-utf8/nkf.h--- ruby-1.9.2-p0/ext/nkf/nkf-utf8/nkf.h2010-04-22 17:04:13.000000000 +0900+++ ruby-1.9.2-p0.android/ext/nkf/nkf-utf8/nkf.h2010-08-19 11:41:13.000000000 +0900@@ -164,6 +164,10 @@ # ifndef HAVE_LOCALE_H # define HAVE_LOCALE_H # endif+#elif defined(__ANDROID__)+# ifndef HAVE_LOCALE_H+# define HAVE_LOCALE_H+# endif #else # ifndef HAVE_LANGINFO_H # define HAVE_LANGINFO_Hdiff -u -r ruby-1.9.2-p0/include/ruby/intern.h ruby-1.9.2-p0.android/include/ruby/intern.h--- ruby-1.9.2-p0/include/ruby/intern.h2010-05-01 02:56:23.000000000 +0900+++ ruby-1.9.2-p0.android/include/ruby/intern.h2010-08-19 11:02:12.000000000 +0900@@ -28,6 +28,9 @@ #endif #include "ruby/st.h" +#ifdef __ANDROID__+#include <sys/select.h>+#endif /* * Functions and variables that are used by more than one source file of * the kernel.
然后是
ndk.patch
diff -u pthread.h.org pthread.h--- pthread.h.org2010-08-16 17:00:54.000000000 +0900+++ pthread.h2010-08-16 17:01:25.000000000 +0900@@ -87,6 +87,7 @@ */ #define PTHREAD_COND_INITIALIZER {0} +#define PAGE_SIZE 0x400 #define PTHREAD_STACK_MIN (2 * PAGE_SIZE) #define PTHREAD_CREATE_DETACHED 0x00000001diff -u linux/in.h.org linux/in.h--- linux/in.h.org2010-08-20 10:53:29.000000000 +0900+++ linux/in.h2010-08-20 10:53:45.000000000 +0900@@ -29,7 +29,7 @@ IPPROTO_RSVP = 46, IPPROTO_GRE = 47, - IPPROTO_IPV6 = 41,+ /*IPPROTO_IPV6 = 41,*/ IPPROTO_ESP = 50, IPPROTO_AH = 51,
这2个是补丁文件。
用patch 命令
patch -p0 < ruby.patch
把ndk.patch 放到你的sysroot目录中。
patch -p0 < ndk.patch
然后把ruby.patch放到ruby源文件目录的外面。(记得文件夹名字
执行
patch -p0 < ruby.patch
如果替换出现异常,手动修补一下。
然后。执行。
./configure --host=arm-eabi --disable-ipv6 --prefix=/system/local --enable-shared
make
XDDDDDDDDandroid的ruby.so文件就出来啦。。。。。。。。。。耶!
0 0
- 填一个坑。关于把ruby编译到android上的一个遗留问题。
- 把桌面qt代码编译运行到qpe上的一个例子
- 把GCC的编译信息重定向到一个文件
- AS 一个历史遗留问题的解决
- 如何把一个Group的信息归总到一列上.
- 把一个文件到追加另外一个文件上
- 把一个文件到追加另外一个文件上 .
- java关于把一个文件从一个文件夹复制到另一个文件夹的操作
- mysql如何把在屏幕上输出的结果输出到一个文件上?
- mysql如何把在屏幕上输出的结果输出到一个文件上?
- 关于Fragment使用的那些坑,给出一个完美的填坑方式!源码相送
- freetype 在android编译时上的一个makefile文件
- freetype 在android编译时上的一个makefile文件
- 移植ffmpeg到android的一个编译错误
- 如何把一个自己写的外部驱动模块编译添加到内核中 来自网络
- 把网页的焦点设置到一个指定的链接上
- 把网页的焦点设置到一个指定的链接上
- 把一个网络文件写到当前机器上
- UVA之1398 - Meteor
- java回调函数
- 为Eclipse定制你自己的注释模板变量
- jquerymobile 学习笔记——新手常见问题
- Log的使用
- 填一个坑。关于把ruby编译到android上的一个遗留问题。
- jdbc连接数据库
- 《计算机程序的构造与解释》(一)
- Codeforces Round #245 (Div. 1)——Guess the Tree
- HDU 4788 (14.05.12)
- leetcode第一刷_Spiral Matrix
- 学习CSS之clear属性
- Jsp和Javascript读写cookie,cookie的path设置,jsp解码cookie值
- 外企、国企、名企 笔记