2013-08-29 45 views
0

我想在我的android項目中使用libjpeg.so。當我運行構建腳本時,共享庫被截斷

我有預編譯的共享庫。

構建腳本在我的項目:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libjpeg 

LOCAL_SRC_FILES :=../lib1/libjpeg.so 

include $(PREBUILT_SHARED_LIBRARY) 

但我會得到什麼。

源文件LIB1/libjpeg.so - 1個290 798字節

但建設 庫/ armeabi/libjpeg.so後文件 - 247個236字節

我分析這2個文件 - 第二個是隻是截斷

,當然我有「java.lang.UnsatisfiedLinkError中」

爲什麼文件被截斷?

回答

1

問題是NDK編譯系統在將它們複製到目標文件夾時會剝離所有預建的共享庫。

如果你真的需要使用libjpeg作爲共享庫,那麼我建議你運行一個後期構建腳本,將原始文件複製到目標文件夾,覆蓋已刪除的文件。

最好的解決方案是預生成一個libjpeg.a靜態庫,然後你就可以避免剝離這樣的:

include $(CLEAR_VARS) 
LOCAL_MODULE := libjpeg 
LOCAL_SRC_FILES :=../lib1/libjpeg.a 
include $(PREBUILT_STATIC_LIBRARY) 

... 

include $(CLEAR_VARS)  
LOCAL_MODULE := mylib 
LOCAL_SRC_FILES := mylib.cpp 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../lib1/include/ 
LOCAL_WHOLE_STATIC_LIBRARIES := libjpeg 
... 
include $(BUILD_SHARED_LIBRARY) 

通知即關閉了LOCAL_WHOLE_STATIC_LIBRARIES這些庫的剝離。