簡體   English   中英

Android NDK構建 - 包括LOCAL_SHARED_LIBRARIES?

[英]Android NDK building - Include LOCAL_SHARED_LIBRARIES?

我在Android NDK下構建項目時遇到問題。 很可能是由於沒有包含正確的共享/靜態庫。 那些作為-lsomeLib我添加了,但是作為LOCAL_SHARED_LIBRARIES的那些沒有被包括在內似乎......

我的Android.mk包含以下內容

LOCAL_SHARED_LIBRARIES + = libutils libmedia libz libbinder

  1. ndk-build實際上在哪里尋找這些庫?
  2. 如果我不包含-lutils -lmedia -lz -lbinder,我甚至無法得到鏈接器錯誤。 我有一種感覺,包括-LsomeDir和-lsomeLib不是添加它們的正確方法。

這是完整的Android.mk。

LOCAL_PATH := /Users/kevin/Desktop/player2/videoplayer/videoplayer/jni
LIBPLAYER_PATH := $(LOCAL_PATH)/../../LibPlayer

include $(CLEAR_VARS)

$(warning Android make file: $(LOCAL_PATH)/Android.mk)
$(warning Android sysroot: $(SYSROOT))
$(warning Additional LD_LIBS: $(LOCAL_PATH)/lib)

ifeq ($(BUILD_ID),MID)
        LOCAL_CFLAGS += -DENABLE_FREE_SCALE
endif

LOCAL_MODULE    := libamplayerjni
LOCAL_SRC_FILES := com_farcore_playerservice_AmPlayer.c sys_conf.c
LOCAL_ARM_MODE := arm
LOCAL_C_INCLUDES := $(LIBPLAYER_PATH)/amplayer/player/include \
    $(LIBPLAYER_PATH)/amplayer/control/include \
    $(LIBPLAYER_PATH)/amcodec/include \
    $(LIBPLAYER_PATH)/amffmpeg \
    $(JNI_H_INCLUDE) \
    /Android/ndk/build/tools/android-9-toolchain/sysroot/usr/include \
    /Android/ndk/build/platforms/android-9/arch-arm/usr/include \
    /Android/source_2.3/system/core/include \
    /Android/source_2.3/frameworks/base/include

LOCAL_LDLIBS := -L/Users/kevin/Desktop/player2/videoplayer/videoplayer/jni/lib -L$(SYSROOT)/usr/lib -llog -lz -lm -ldl **-lmedia -lstagefright -lutils -lbinder -lgcc -landroid -lc -lstdc++ -lthread_db**

**LOCAL_STATIC_LIBRARIES := libamplayer libamcodec libavformat libavcodec libavutil libamadec**
LOCAL_SHARED_LIBRARIES += libutils libmedia libz libbinder 

LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)

與這些庫特別相關的許多錯誤之一(即libmedia.so)。

/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_uninit':
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:220: undefined reference to `android::AudioTrack::stop()'
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:228: undefined reference to `android::AudioTrack::~AudioTrack()'
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock':

在我看來,你不應該在你的LOCAL_LDLIBS參數中包含-lmedia等。

1. ndk-build實際上在哪里尋找這些庫?

如果您查看$NDK/docs/STABLE-APIS.html您將看到有一組指定的庫可以這種方式包含在內。 注意:

The headers corresponding to a given API level are now located under $NDK/platforms/android-<level>/arch-arm/usr/include

看了我自己之后,那里沒有你指定的庫,盡管我只尋找API-14。


2.如果我不包含-lutils -lmedia -lz -lbinder,我甚至無法得到鏈接器錯誤。 我有一種感覺,包括-LsomeDir和-lsomeLib不是添加它們的正確方法。

如果您的庫只是常規的c / c ++庫,那么#include應該使用LOCAL_C_INCLUDES

另請注意,來自$NDK/docs/ANDROID-MK.html

  • 構建系統為您處理許多細節。 例如,您不需要列出Android.mk中生成的文件之間的頭文件或顯式依賴項。 NDK構建系統將自動為您計算這些。

為了在我的本機代碼中使用其他庫,我只需#include它,然后指定在哪里找到標題。 這是我的LOCAL_C_INCLUDES

LOCAL_C_INCLUDES := $(LOCAL_PATH)/shared/Core/inc \
                    $(LOCAL_PATH)/shared/Model/inc  \
                    $(LOCAL_PATH)/shared/boost/include

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM