首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android NDK 編譯 libmp3lame:undefined reference to hip_decode 解決方案

     編輯:程式設計綜合問答

錯誤現象

NDK 編譯報錯:undefined reference to 'hip_decode',符號定義在 mpglib_interface.c 中,但鏈接階段找不到。

原因

libmp3lame 內部模塊 libmpgdecoder (含 hip_decode) 默認不編入靜態庫,或編譯條件宏未開啟,導致符號缺失。

快速修復(治標)

在 Android.mk 中允許未定義符號,鏈接時不報錯(運行時若調用會崩潰):

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

徹底修復(治本)

  1. 確認編譯宏:確保 DECODE_LAYER、MPGLIB 等宏在 Application.mk 或 Android.mk 的 LOCAL_CFLAGS 中開啟。
    LOCAL_CFLAGS += -DDECODE_LAYER=1 -DMPGLIB=1
    
  2. 納入 mpglib 源文件:將 mpglib_interface.c、mpg123.c 等加入 LOCAL_SRC_FILES 參與編譯。
    LOCAL_SRC_FILES += \
        libmp3lame/mpglib_interface.c \
        libmp3lame/mpg123.c \
        ...
    
  3. 使用預構建共享庫:直接引入官方發布的 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 確認符號導出。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved