NDK 編譯報錯:undefined reference to 'hip_decode',符號定義在 mpglib_interface.c 中,但鏈接階段找不到。
libmp3lame 內部模塊 libmpgdecoder (含 hip_decode) 默認不編入靜態庫,或編譯條件宏未開啟,導致符號缺失。
在 Android.mk 中允許未定義符號,鏈接時不報錯(運行時若調用會崩潰):
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
DECODE_LAYER、MPGLIB 等宏在 Application.mk 或 Android.mk 的 LOCAL_CFLAGS 中開啟。LOCAL_CFLAGS += -DDECODE_LAYER=1 -DMPGLIB=1
mpglib_interface.c、mpg123.c 等加入 LOCAL_SRC_FILES 參與編譯。LOCAL_SRC_FILES += \
libmp3lame/mpglib_interface.c \
libmp3lame/mpg123.c \
...
libmp3lame.so,避免自行編譯坑。include $(CLEAR_VARS)
LOCAL_MODULE := mp3lame-prebuilt
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libmp3lame.so
include $(PREBUILT_SHARED_LIBRARY)
編譯通過後,用 arm-linux-androideabi-nm -D libmp3lame.so | grep hip_decode 確認符號導出。