1. 程式人生 > >Android系統編譯so庫提示error undefined reference to '__android_log_print問題的解決

Android系統編譯so庫提示error undefined reference to '__android_log_print問題的解決

在系統原始碼的hardware/qcom下增加psam資料夾,編譯原始碼要生成libpsam.so庫,Android.mk內容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

 

LOCAL_MODULE       := libpsam

LOCAL_SRC_FILES       := psam.c

LOCAL_MODULE_TAGS  := optional

LOCAL_MODULE_CLASS := SHARED_LIBRARIES

include $(BUILD_SHARED_LIBRARY)

 

但編譯出錯,提示error undefined reference to '__android_log_print錯誤,__android_log_print在system\core\liblog\logd_writer.c

 

這個錯誤表示找不到__android_log_print的引用,錯誤原因可能是so檔案沒有沒有新增log的連結庫,所以我們需要在在Android.mk中新增log的連結庫;

 

解決方法有兩種方法:

------------------------------方法1-----------------------------------------

增加LOCAL_LDLIBS    := -llog

LOCAL_LDFLAGS:這個編譯變數傳遞給連結器一個一些額外的引數,比如想傳遞額外的庫和庫路徑給ld,或者傳遞給ld linker的一些連結引數,-On,-EL{B}(大小端位元組序),那麼就要加到這個上面,如:

LOCAL_LDFLAGS += -L$(LOCAL_PATH)/lib/ -lHWrecog –EB{EL} –O{n} …

或者直接加上絕對路徑庫的全名:

LOCAL_LDFLAGS += $(LOCAL_PATH)/lib/libHWrecog.a –EB{EL} –O{n}

------------------------------方法2-----------------------------------------

增加LOCAL_SHARED_LIBRARIES相關

LOCAL_SHARED_LIBRARIES := \

        libnativehelper \

              libcutils

LOCAL_SHARED_LIBRARIES 會生成依賴關係,當庫不存在時會去編譯這個庫。