星期六, 4月 13, 2013

【MAC】【Android】編譯 LUA 以及 LUAJAVA 並且導入 libgdx 專案

這一連串的動作在LINUX已經夠麻煩了,在MAC也是OOXX的,而且做完一次就不會想在弄第二次。

(一) 編譯 32BIT的 LUA ,也可以不需要做這個動作,純粹是做筆記。




1.編輯 src/Makefile

macos:          $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-lreadline"  
修改為 
macos: $(MAKE) all MYCFLAGS="-DLUA_USE_LINUX -arch i386" MYLIBS="-lreadline -arch i386" 


2.之後就編譯 以及 安裝
make macossudo make install 
3.留意 IANSTALL 路徑

cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1


(二)編譯 luajava

參考:http://retrovirus.com/incr/2005/08/building-luajava/

1.下載編譯好的版本或者用你自己編譯的,小弟這裡下載:
http://luabinaries.sourceforge.net/download.html
lua5_1_4_MacOS106_lib.tar.gz ,也可以連 bin 也抓,在本機可以用。

2.解壓縮 之後 找出 include 路徑 ,作為CONFIG檔的Lua 路徑

3.設定JAVA HOME include 路徑,這個鬼東西,害我一直沒編譯過,原來java home 路徑的根本不叫做INCLUDE 也不再 /Library/Java/Home 裡面,這個標頭檔資料夾在:/System/Library/Frameworks/JavaVM.framework/Headers 。
先進入 /Library/Java/Home 之後做捷徑:
 sudo ln -s /System/Library/Frameworks/JavaVM.framework/Headers include

4.下載 LUAJAVA :https://github.com/jasonsantos/luajava

5.解壓縮編輯 config 檔,紅色的地方就是已經增加或加註解或者修改的地方。

#############################################################
#Linux/BSD/Mac
LUA_DIR=
/Volumes/MacSpace/Library/lua5_1_4_MacOS106_lib
LUA_LIBDIR= /Volumes/MacSpace/Library/lua5_1_4_MacOS106_lib
LUA_INCLUDES= /Volumes/MacSpace/Library/lua5_1_4_MacOS106_lib/include
#JDK= $(JAVA_HOME)
# For Mac OS, comment the above line and uncomment this one
JDK=/Library/Java/Home
# Full path to Lua static library
LIB_LUA=/Volumes/MacSpace/Library/lua5_1_4_MacOS106_lib/liblua5.1.a


#Linux/BSD
#LIB_EXT= .so
#Mac OS
LIB_EXT= .jnilib
LIB_PREFIX= lib

#Linux/BSD
#LIB_OPTION= -shared
#Mac OS
#LIB_OPTION= -dynamiclib -all_load
LIB_OPTION= -dynamiclib -all_load
## On FreeBSD and Mac OS systems, the following line should be commented
DLLIB= -ldl
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings
INCS= -I$(JDK)/include -I$(JDK)/include/linux -I$(LUA_INCLUDES)
CFLAGS= $(WARN) $(INCS)
CC= gcc

#########################################################
VERSION= 1.1
PKG= luajava-$(VERSION)
TAR_FILE= $(PKG).tar.gz
ZIP_FILE= $(PKG).zip
JAR_FILE= $(PKG).jar
SO_FILE= $(LIB_PREFIX)$(PKG)$(LIB_EXT)
DIST_DIR= $(PKG)
# $Id: config,v 1.12 2006/12/22 14:06:40 thiago Exp $
6.之後進行編譯
make
7.資料夾裡面有一個 附檔名jnilinb 的檔案: libluajava-1.1.jnilib


(三)使用ndk編譯 luajava
編譯方法就和 LINUX 一樣了

1.先抓NDK http://developer.android.com/tools/sdk/ndk/index.html

2.在抓高手調整好的androLua: https://github.com/mkottman/AndroLua

3.解壓縮後 裡面的 jni 直接 複製到 ndk 的目錄下

4. 之後 就 ./ndk-build

5.在LIBS/ARMEABI 中 就有 libluajava.so

(四)導入 libgdx 專案

這樣子 桌面版 和 手機版就都可以動了,就可以寫遊戲了,超棒。。


2013 10/11 更新

專案必須增加 native library location的路徑, 否則會抓不到 luajava

Eclipse Lua Tool
1. http://www.eclipse.org/koneki/ldt/#installation



星期四, 4月 11, 2013

「veryLittlePHP」 CREATE DB MODLE

「 My Framework API 」

糟糕,自己寫的鬼框架都記不住了  。 :(

關於自動判別 insert or update DB 函數

特色:
1.提供自動判別 INSERT AND UPDATE
2.DATALIST儲存值 KEY 自動過濾

1.繼承 cx_db
2.在 __construct() 設定 Drives ( mysql or mssql)
3. $this->autoSave( $TableName , $Pk , $DataList  );

$TableName  :  表名稱
$Pk : pk主鍵
$DataList :  儲存資料陣列
      + 結構: $DataList[  {欄位名稱}  ]  =  {儲存的值} ;


範例:
<?php
class mod_file extends cx_db{
    var $mTableName = 'sign_up_file';
    public function __construct( ) {
        $this->setDrives('mysql');
        parent::__construct( );
    }

    public function getFileDataByXno($_year , $_sid){
        $this->mConn->setCxTitle( "mod_file::getFileDataByXno 取得教師服務資料" );
        $_sql = "SELECT * FROM sign_up_file where year=? and sid=? ;";
        return $this->sqlExec( $_sql, array($_year, $_sid )  )->getArray(0);
    }

    public function saveFile($_arr){
        $this->mConn->setCxTitle( "mod_file::saveFile 寫入資料" );
        //檢查 是否有資料
        $_uFData = $this->getFileDataByXno($_arr['year'] , $_arr['sid']);

        if($_uFData == null or $_uFData == false or $_uFData == ''){
            // "insert";
        }else{
            // "update";
            $_arr['id'] = $_uFData['id'];
        }

        return $this->autoSave( 'sign_up_file', 'id', $_arr );
    }

}
?>

星期五, 4月 05, 2013

「Arch」ERROR: Unable to find root device

最近 更新完就掛掉了,
開機寫着 ERROR: Unable to find root device 有的沒得。

一 重新設定
參考: http://www.erufenix.net/blog/solucinar-unable-to-find-root-device-en-archlinux/

 1.準備新版的 ARCH LIVE CD

2.進入後掛載自己的硬碟

mount /dev/sda4 /mnt
mount /dev/sda5 /mnt/boot

mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount --bind /dev /mnt/dev

3.ROOT AS /MNT

chroot /mnt

4.更新 以及重新安裝 mkinitcpio

pacman -Syyu
pacman -S udev
pacman -S mkinitcpio

5.重新設定 mkinitcpio


mkinitcpio -p linux

6.重開機 OK


二 關於套件全部重新安裝

 腳本:
#! /bin/sh

for pkg in $(pacman -Q | cut -d' ' -f1); do
    pacman -S --noconfirm $pkg
done