我会很快暴露我的问题。我试图在Android上移植curl并在我的应用程序中使用它。我使用ARM工具链构建了curl库,进行了配置和制作(几次以确保我第一次没有做错任何事情)。
然后我继续将新创建的libcurl.a和我的curljni.c放入我的jni文件夹中,只要以下Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libcurl
LOCAL_SRC_FILES := libcurl.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/curl
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := curljni
LOCAL_SRC_FILES := curljni.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/curl
LOCAL_STATIC_LIBRARIES := libcurl
include $(BUILD_SHARED_LIBRARY)
我一直在尝试很多东西,我很确定它现在看起来不错,但每当我尝试使用ndk-build工具构建时,我都会获得以下内容:
注意:curljni.c调用libcurl库及其easy.h和curl.h文件中的函数。然后将它们包含在文件的顶部。
我还尝试使用LOCAL_WHOLE_STATIC_LIBRARIES而不是LOCAL_STATIC_LIBRARIES来请求将整个库加载到我的Android应用中,但没有取得多大成功:
以前:
答案 0 :(得分:0)
确定, 您的问题是您的库libcurl.a没有使用Android ndk gcc构建。 你做完了:
$ ./configure --host=arm-linux-androidaebi --with-zlib --enable-ipv6
$ make
$ make install
这将使用您的PC gcc生成一个库..不太好。
我所做的是使用line命令配置开源库l for android(或者你已经完成):
./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi
但是你不应该叫make和make install!
你必须创建一个android.mk whinch将编译libcurl中的所有源文件+你的jni文件'curljni.c'并将所有文件放在一个lib中:这里是Android.mk编译SQLITE3的一个例子
###################################################
# SQLITE3
###################################################
include $(CLEAR_VARS)
LOCAL_MODULE := Mysqlite3
MY_LOCAL_SQLITE_SRC := $(LOCAL_PATH)/sqlite/
LOCAL_CPPFLAGS := -g
LOCAL_CPPFLAGS += -I $(MY_LOCAL_SQLITE_SRC)
LOCAL_EXPORT_C_INCLUDES:=$(MY_LOCAL_SQLITE_SRC)
FILE_LIST :=$(wildcard $(MY_LOCAL_SQLITE_SRC)*.c*)
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%)
# My SQLITE3 JNI FILE
LOCAL_SRC_FILES +=mysqlite_jni.cpp
# include native NDK library liblog and libz
LOCAL_LDLIBS := -llog -lz
include $(BUILD_SHARED_LIBRARY)