0
我想建立一個簡單的Android二進制文件來測試UBSAN(未定義的行爲消毒劑)使用ndk r15c和鏗。Android nkd r15c和UBSAN鐺
jni/main.cpp:17: error: undefined reference to '__ubsan_handle_type_mismatch_v1'
jni/main.cpp:24: error: undefined reference to '__ubsan_handle_add_overflow'
jni/main.cpp:30: error: undefined reference to '__ubsan_handle_type_mismatch_v1'
jni/main.cpp:32: error: undefined reference to '__ubsan_handle_type_mismatch_v1'
jni/main.cpp:32: error: undefined reference to '__ubsan_handle_type_mismatch_v1'
jni/main.cpp:32: error: undefined reference to '__ubsan_handle_dynamic_type_cache_miss'
jni/main.cpp:33: error: undefined reference to '__ubsan_handle_dynamic_type_cache_miss'
jni/main.cpp:33: error: undefined reference to '__ubsan_handle_dynamic_type_cache_miss'
jni/main.cpp:34: error: undefined reference to '__ubsan_vptr_type_cache'
jni/main.cpp:34: error: undefined reference to '__ubsan_vptr_type_cache'
jni/main.cpp:34: error: undefined reference to '__ubsan_vptr_type_cache'
jni/main.cpp:34: error: undefined reference to '__ubsan_handle_dynamic_type_cache_miss'
jni/main.cpp:36: error: undefined reference to '__ubsan_vptr_type_cache'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.c:336: error: undefined reference to '__ubsan_handle_sub_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.c:357: error: undefined reference to '__ubsan_handle_load_invalid_value'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.c:343: error: undefined reference to '__ubsan_handle_load_invalid_value'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.c:348: error: undefined reference to '__ubsan_handle_load_invalid_value'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.h:192: error: undefined reference to '__ubsan_handle_load_invalid_value'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_ostream.h:136: error: undefined reference to '__ubsan_handle_negate_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/char_traits.h:194: error: undefined reference to '__ubsan_handle_negate_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_string.h:379: error: undefined reference to '__ubsan_handle_add_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_string_base.h:105: error: undefined reference to '__ubsan_handle_negate_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_string_base.h:105: error: undefined reference to '__ubsan_handle_divrem_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_alloc.h:330: error: undefined reference to '__ubsan_handle_negate_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_alloc.h:330: error: undefined reference to '__ubsan_handle_divrem_overflow'
/opt/android_ndk/android-ndk-r15c/sources/cxx-stl/stlport/stlport/stl/_alloc.h:352: error: undefined reference to '__ubsan_handle_divrem_overflow'
我Android.mk文件如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -Wall
LOCAL_LDLIBS := -L$(LOCAL_PATH)/lib -llog -g
LOCAL_C_INCLUDES := bionic
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_SRC_FILES:= main.cpp
LOCAL_CPPFLAGS := -Wall -fPIE -fexceptions -fsanitize=undefined
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -fPIE -pie -fsanitize=undefined
LOCAL_MODULE := ubsan_test
include $(BUILD_EXECUTABLE)
我Application.mk如下:然而構建試圖與下面的錯誤鏈接失敗時
NDK_TOOLCHAIN_VERSION:=clang
APP_STL:=stlport_static
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-17
我猜測我錯過了一些鏈接器標誌或其他設置,但一直未能弄清楚發生了什麼。查看ubsan運行時中的符號,sybol似乎就存在了。
注意:我也試過在我的Android.mk中使用LOCAL_SANITIZE:= undefined代替-fsanitize = undefined,結果相同。
UBSAN運行時包含在ndk r15c中。我看到這個庫包括在內,如果我將它作爲一個預先構建的庫並添加鏈接,就可以按預期工作。但是,使用這些標誌似乎不起作用。 – user821602