【问题标题】:Cannot find libxml2 in android ndk project在 android ndk 项目中找不到 libxml2
【发布时间】:2014-02-28 02:10:50
【问题描述】:

大家好。当我尝试将 libxml2 添加到我的 android ndk 项目时,我已经浪费了将近一周的时间来弄清楚出了什么问题。

 LOCAL_PATH     := $(call my-dir)
    #BUILDING LIBXML2
     include $(CLEAR_VARS)
LOCAL_MODULE := xml2
LOCAL_SRC_FILES :=  $(LOCAL_PATH)/libxml2/libxml2.a
LOCAL_C_INCLUDES := $(LOCAL_PATH)/libxml2/include
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libxml2/include
LOCAL_DISABLE_FORMAT_STRING_CHECKS := true  
include $(BUILD_SHARED_LIBRARY)
#BUILDING SOME SPICE CODES
include $(CLEAR_VARS)

LIB_PATH := $(LOCAL_PATH)/../../libs/armeabi

SPICE_CLIENT_ANDROID_DEPS   := $(LOCAL_PATH)/../libs/deps

spice_objs := \
                   $(SPICE_CLIENT_ANDROID_DEPS)/lib/libssl.a \
                   $(SPICE_CLIENT_ANDROID_DEPS)/lib/libcrypto.a \
                   $(SPICE_CLIENT_ANDROID_DEPS)/lib/libcelt051.a 

LOCAL_MODULE    := spice

LOCAL_SRC_FILES := channel-record.c channel-playback.c channel-cursor.c \
                   spice-cmdline.c coroutine_gthread.c spice-util.c \
                   spice-session.c spice-channel.c spice-marshal.c spice-glib-enums.c \
                   common/generated_client_demarshallers.c common/generated_client_demarshallers1.c \
                   common/generated_client_marshallers.c common/generated_client_marshallers1.c \
                   gio-coroutine.c channel-base.c channel-main.c spice-proxy.c bio-gsocket.c glib-compat.c \
                   channel-display.c channel-display-mjpeg.c channel-inputs.c decode-glz.c \
                   decode-jpeg.c decode-zlib.c wocky-http-proxy.c channel-port.c spice-client.c spice-audio.c \
                   common/mem.c common/marshaller.c common/canvas_utils.c common/backtrace.c \
                   common/sw_canvas.c common/pixman_utils.c common/lines.c common/rop3.c common/quic.c \
                   common/lz.c common/region.c common/ssl_verify.c common/log.c spice-gstaudio.c

LOCAL_LDLIBS    += $(spice_objs) \
                   -ljnigraphics -llog -ldl -lstdc++ -lz -lc \
                   -malign-double -malign-loops
LOCAL_LDLIBS    += -L$(LIB_PATH) -lgstreamer_android

LOCAL_CPPFLAGS  += -DG_LOG_DOMAIN=\"GSpice\" \
                   -DSW_CANVAS_CACHE \
                   -DSPICE_GTK_LOCALEDIR=\"/usr/local/share/locale\" \
                   -DHAVE_CONFIG_H -UHAVE_SYS_SHM_H -DSW_CANVAS_CACHE  \
                   -D_REENTRANT -DWITH_GSTAUDIO

LOCAL_C_INCLUDES += $(LOCAL_PATH)/common \
                    $(SPICE_CLIENT_ANDROID_DEPS)/include

LOCAL_CFLAGS    :=  $(LOCAL_CPPFLAGS) \
                   -std=gnu99 -Wall -Wno-sign-compare -Wno-deprecated-declarations -Wl,--no-undefined \
                   -fPIC -DPIC -O3 -funroll-loops -ffast-math

LOCAL_EXPORT_CFLAGS += $(LOCAL_CFLAGS)
LOCAL_EXPORT_LDLIBS += $(LOCAL_LDLIBS)
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_ARM_MODE := arm
include $(BUILD_STATIC_LIBRARY)
#BUILDING SOME MINE C CODE   --------Here i add Mine C file and xml2 for it
include $(CLEAR_VARS)
LOCAL_MODULE    := start-spice
LOCAL_SRC_FILES := start-spice.c
LOCAL_SHARED_LIBRARIES= xml2
include $(BUILD_SHARED_LIBRARY)
#BUILDING SPICE ANDROID
include $(CLEAR_VARS)
LOCAL_MODULE    := spice-android
LOCAL_SRC_FILES := android/android-service.c android/android-spicy.c android/android-spice-widget.c \
                   android/android-io.c
LOCAL_STATIC_LIBRARIES := spice
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
ifndef GSTREAMER_SDK_ROOT
ifndef GSTREAMER_SDK_ROOT_ANDROID
$(error GSTREAMER_SDK_ROOT_ANDROID is not defined!)
endif
GSTREAMER_SDK_ROOT        := $(GSTREAMER_SDK_ROOT_ANDROID)
endif
GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build/
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS         := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_SYS) jpeg
GSTREAMER_EXTRA_DEPS      := glib-2.0 gthread-2.0 pixman-1 gstreamer-app-0.10

include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer.mk   

所以即使在我将 xml2.so 作为共享库添加到我的项目之后 - 也没有任何反应。它仍然找不到库并给了我很多这个

[armeabi] SharedLibrary  : libstart-spice.so
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:251: error: undefined reference to 'xmlNewDoc'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:252: error: undefined reference to 'xmlNewNode'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:253: error: undefined reference to 'xmlNodeSetContent'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:254: error: undefined reference to 'xmlDocSetRootElement'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:255: error: undefined reference to 'xmlDocDumpFormatMemory'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function create_request:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:256: error: undefined reference to 'xmlFreeDoc'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:144: error: undefined reference to 'xmlReadMemory'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:153: error: undefined reference to 'xmlDocGetRootElement'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:163: error: undefined reference to 'xmlHasProp'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:170: error: undefined reference to 'xmlHasProp'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:172: error: undefined reference to 'xmlGetProp'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:182: error: undefined reference to 'xmlHasProp'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:184: error: undefined reference to 'xmlGetProp'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:221: error: undefined reference to 'xmlFreeDoc'
/opt/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/objs/start-spice/start-spice.o: in function Java_com_iiordanov_bVNC_NativeCalls_getPortAndPassword:/opt/Test6/bVNC/eclipse_projects/bVNC/jni/src/start-spice.c:234: error: undefined reference to 'xmlFreeDoc'
collect2: ld returned 1 exit status
make: *** [/opt/Test6/bVNC/eclipse_projects/bVNC/obj/local/armeabi/libstart-spice.so] Error 1

start-spice 中的С 代码头如下所示:

#include <jni.h>
#include <android/log.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <libxml/parser.h>
#include <netdb.h>
#include <unistd.h>
#include <errno.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

我在java代码中添加:

 static
    {
       System.loadLibrary("start-spice");
    }

如果有人提供帮助将非常感激!

【问题讨论】:

  • 尝试将-lxml2添加到LOCAL_LDLIBS

标签: android android-ndk java-native-interface libxml2


【解决方案1】:

如果您在$(LOCAL_PATH)/libxml2/libxml2.a 中有预构建的 Android 静态库,您可以在 spice-android 项目中使用它,

LOCAL_STATIC_LIBRARIES += xml2

xml2 使用 include $(BUILD_SHARED_LIBRARY),而不是使用

LOCAL_SRC_FILES :=  libxml2/libxml2.a
include $(PREBUILT_STATIC_LIBRARY)

如果你有充分的理由使用xml2作为单独的共享库,你需要添加调用

System.loadLibrary("xml2");

到您的 Java 代码(在加载 libspice-android.so 之前)并将 LOCAL_SRC_FILES := $(LOCAL_PATH)/libxml2/libxml2.a 替换为

LOCAL_WHOLE_STATIC_LIBRARIES :=  $(LOCAL_PATH)/libxml2/libxml2.a

【讨论】:

    【解决方案2】:

    这是链接共享库的问题,您需要在LOCAL_SHARED_LIBRARIES= xml2之前添加LOCAL_LDLIBS += $(LIB_PATH) -lxm2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-15
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2014-05-30
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多