經過一天半的修改,我終於得到了VLC項目,幾乎可以在OS X下編譯。當它剛剛鏈接libvlcjni.so時,出現以下錯誤。大概有100多個未定義的引用,但多數是一些功能:爲Android編譯VLC的問題 - libvlcjni.so
的std :: __ stl_throw_length_error(字符常量*) 的std :: __ node_alloc :: _ M_deallocate(void *的,無符號整型)
有沒有人有任何指針?
編譯拇指:vlcjni < = aout.c 編譯拇指:vlcjni < =並行線程-condattr.c 編譯拇指:vlcjni < =並行線程-rwlocks.c 編譯拇指:vlcjni < = eventfd.c 編譯拇指:vlcjni < = sem.c SharedLibrary:libvlcjni.so ../vlc/android/modules/demux/mkv/.libs/libmkv_plugin.a(libmkv_plugin_la-mkv.o):在功能std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_compare(char const*, char const*, char const*, char const*)': /Android/ndk/sources/cxx-stl/stlport/stlport/stl/_string.h:1076: undefined reference to
的std :: __ stl_throw_out_of_range(炭const *)'
Application.mk
APP_PLATFORM := android-9
ifeq ($(NO_NEON),)
APP_ABI := armeabi-v7a
else ifneq ($(TEGRA2),)
APP_ABI := armeabi-v7a
else
APP_ABI := armeabi
endif
APP_STL := gnustl_static
APP_PLATFORM := android-9
APP_ABI := armeabi-v7a
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ifeq ($(NO_NEON),)
ARCH=armeabi-v7a
LOCAL_MODULE := libvlcjni
else ifneq ($(TEGRA2),)
ARCH=armeabi-v7a
LOCAL_MODULE := libvlcjni-tegra2
else
ARCH=armeabi
LOCAL_MODULE := libvlcjni
endif
LOCAL_SRC_FILES := libvlcjni_danmaku.c aout.c pthread-condattr.c pthread-rwlocks.c eventfd.c sem.c
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/include
ifeq ($(NO_NDK_V7),1)
CPP_STATIC=$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/libs/$(ARCH)/libstdc++.a
else
CPP_STATIC=$(ANDROID_NDK)/sources/cxx-stl/stlport/libs/$(ARCH)/libstlport_static.a
endif
LOCAL_CFLAGS := -std=gnu99
LOCAL_LDLIBS := -L$(VLC_CONTRIB)/lib \
$(VLC_MODULES) \
$(VLC_BUILD_DIR)/lib/.libs/libvlc.a \
$(VLC_BUILD_DIR)/src/.libs/libvlccore.a \
$(VLC_BUILD_DIR)/compat/.libs/libcompat.a \
-ldl -lz -lm -llog \
-ldvbpsi -lebml -lmatroska -ltag \
-logg -lFLAC -ltheora \
-lmpeg2 -ldca -la52 \
-lavformat -lavcodec -lswscale -lavutil -lpostproc -lgsm -lopenjpeg \
-lliveMedia -lUsageEnvironment -lBasicUsageEnvironment -lgroupsock \
-lspeex -lspeexdsp \
-lxml2 -lpng -lgnutls -lgcrypt -lgpg-error -lfreetype -liconv \
$(CPP_STATIC)
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-gingerbread
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_GINGERBREAD)/frameworks/base/include $(ANDROID_SYS_HEADERS_GINGERBREAD)/system/core/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-hc
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_HC)/frameworks/base/include $(ANDROID_SYS_HEADERS_HC)/frameworks/base/native/include $(ANDROID_SYS_HEADERS_HC)/system/core/include $(ANDROID_SYS_HEADERS_HC)/hardware/libhardware/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-ics
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_ICS)/frameworks/base/include $(ANDROID_SYS_HEADERS_ICS)/frameworks/base/native/include $(ANDROID_SYS_HEADERS_ICS)/system/core/include $(ANDROID_SYS_HEADERS_ICS)/hardware/libhardware/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
謝謝你的快速反應。問題是將這兩個標誌添加到Application.mk使ndk-build更早失敗:SharedLibrary:libiomx-gingerbread.so ./obj/local/armeabi-v7a/objs-debug/iomx-gingerbread/__/__/。 /vlc/modules/codec/omxil/iomx.o:函數'IOMXContext': /Users/kevin/Documents/workspace/vlc-android-macbuild/vlc-full-cortex-a9-vfpv3-d16/vlc-android /jni/../.././vlc/modules/codec/omxil/iomx.cpp:39:未定義引用'__cxa_end_cleanup' –
嘗試添加「APP_STL:= gnustl_static」。到Application.mk,當然 –
還要添加「APP_PLATFORM:= android-7」以確保你使用了一個體面的工具鏈/庫。 「APP_ABI:= armeabi-v7a」可能也有幫助 –