2012-05-31 52 views
2

经过一天半的修改,我终于得到了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) 

回答

2

尝试包括这些行到您的Application.mk:

APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions 

你必须明确地启用RTTI和异常处理。

EDIT(回答您的修改):

# These are your lines in 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 

# Add these lines: 
APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions 
# I haven't seen them 
+0

谢谢你的快速反应。问题是将这两个标志添加到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' –

+0

尝试添加“APP_STL:= gnustl_static”。到Application.mk,当然 –

+0

还要添加“APP_PLATFORM:= android-7”以确保你使用了一个体面的工具链/库。 “APP_ABI:= armeabi-v7a”可能也有帮助 –