Android用にlibnice(具体的にはv0.18)をコンパイルしようとしていますが、いくつかの問題が発生しました。libnice を Android 用にコンパイルするにはどうすればよいですか? これまでの試みを以下にリストしました。
1 回目の試行
私の最初の試みは、カスタムの Android.mk makefile を使用することでしたが、エラーが表示されましたAI_NUMERICHOST undeclared
(追加#include <netdb.h>
してもこれは解決されず、ここではアイデアがありません)。以下の Android.mk を参照してください
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := glib
LOCAL_SRC_FILES := lib/libglib-2.0.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := gobject
LOCAL_SRC_FILES := lib/libgobject-2.0.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := gmodule
LOCAL_SRC_FILES := lib/libgmodule-2.0.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := gio
LOCAL_SRC_FILES := lib/libgio-2.0.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := gthread
LOCAL_SRC_FILES := lib/libgthread-2.0.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ffi
LOCAL_SRC_FILES := lib/libffi.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := iconv
LOCAL_SRC_FILES := lib/libiconv.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := intl
LOCAL_SRC_FILES := lib/libintl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := xml2
LOCAL_SRC_FILES := lib/libxml2.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := z
LOCAL_SRC_FILES := lib/libz.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
NICE := libnice-0.1.8
LOCAL_MODULE := ice_jni
LOCAL_LDLIBS := -llog
LOCAL_STATIC_LIBRARIES := glib gobject gmodule gio gthread ffi iconv intl xml2 z
NICE_INCLUDES := $(LOCAL_PATH)/include \
$(LOCAL_PATH)/lib/glib-2.0/include \
$(LOCAL_PATH)/lib/libffi-3.0.13/include \
$(wildcard $(LOCAL_PATH)/include/*) \
$(LOCAL_PATH)/$(NICE)/nice \
$(LOCAL_PATH)/$(NICE)/agent \
$(LOCAL_PATH)/$(NICE)/random \
$(LOCAL_PATH)/$(NICE)/socket \
$(LOCAL_PATH)/$(NICE)/stun
NICE_SRC := $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(NICE)/agent/*.c)) \
$(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(NICE)/random/*.c)) \
$(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(NICE)/socket/*.c)) \
$(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(NICE)/stun/*.c))
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
$(NICE_INCLUDES)
LOCAL_SRC_FILES := ICE.cpp \
$(NICE_SRC)
include $(BUILD_SHARED_LIBRARY)
スタティック ライブラリは gstreamer 1.4.1 デバッグ バージョンからコピーされ、以下のガイドに従って選択されます。
2回目の試行
次に、このガイドを参照して静的ライブラリをコンパイルしようとしましたが、これが再び問題を引き起こしています。
export PKG_CONFIG_PATH=`pwd`/../gstreamer/lib/pkgconfig
export CFLAGS="--sysroot=`pwd`/../toolchain/sysroot"
./configure --prefix=`pwd`/../build --host=arm-linux-androideabi
これにより、以下のエラーが発生します。CFLAGS に-mthumb
orを追加すると、 configure 中にエラーが発生します。-marm
C compiler cannot create executables
stunagent.c: Assembler messages:
stunagent.c:160: Error: no such instruction: `rev %eax,%eax'
stunagent.c:676: Error: no such instruction: `rev16 %ax,%ax'
上記の行には ASM は含まれていませんが、htons
andntohl
を呼び出しているため、何か間違ったことをしたと思います...
ツールチェーンを作成するために、さまざまな Android バージョンを使用make_standalone_toolchain
して NDK から使用しました。
誰でも助けることができますか?前もって感謝します!〜