編譯Android VNC Server

王慶發表於2013-08-29

1,在如下地址checkout原始碼,我checkout的版本為0.9.7
http://code.google.com/p/android-vnc-server/source/checkout

2,在原始碼目錄下,新建jni目錄,將checkout的原始碼都剪下至該目錄

3,在jni目錄,新建Application.mk檔案,新增APP_ABI := aremabi armeabi-v7a,儲存檔案退出

4,修改LibVNCServer-0.9.7/libvncserver/main.c檔案中的第245行,將sprintf(stderr,buf); 修改為sprintf(stderr,"%s",buf); 不然編譯的時候會出錯。

5,使用vi開啟Android.mk,發現它需要使用第三方的庫檔案libz.so和libjpeg.a,libz.so在ndk中已經支援,我們需要先編譯libjpeg,才能繼續往下執行

6,去這裡檢視如何編譯arm版的libjpeg(http://blog.csdn.net/gengshenghong/article/details/7016617

7,在jni目錄項新建一個include資料夾,將libjpeg的標頭檔案拷貝至該目錄(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)

8,將編譯的libjpeg.a靜態庫拷貝至jni目錄

9,修改Android.mk檔案的LOCAL_C_INCLUDE := $(LOCAL_PATH) $(LOCAL_PATH)/LibVNCServer-0.9.7/libvncserver $(LOCAL_PATH)/LibVNCServer-0.9.7 include 
註釋掉 LOCAL_SHARED_LIBRARIES := libz 和 LOCAL_STATIC_LIBRARIES := libjpeg
新增LOCAL_LDLIBS := libjpeg.a -lz
儲存修改。

10,使用vi開啟include/jmorecfg.h檔案,修改第263行程式碼,將其中的typedef enum { FALSE = 0, TRUE = 1 } boolean; 修改為:
typedef enum { false = 0, true = 1 } boolean; 不修改的話,會提示error: expected identifier before numeric constant錯誤。

11,至此,使用ndk-build就能編譯androidvncserver了。

 

參考文章:http://xuxd32.blog.163.com/blog/static/48121933201172411850206/
http://stackoverflow.com/questions/15172387/error-while-installing-tiff-3-8-2
http://blog.csdn.net/gengshenghong/article/details/7016617
http://bbs.gfan.com/android-116468-1-1.html

 

相關文章