1

我会很快暴露我的问题。我正在尝试在 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 应用程序中,但没有取得更多成功:

在此处输入图像描述

之前 :

  • 下载 curl.7.28.0
  • 为 ARM 4.6 制作了一个独立的工具链
  • 修复了 curl 中的几个文件,其换行符类似于 DOS 并且需要类似于 Unix(配置中的错误) - 其中一个是 depcomp,链接到 libcurl_la-file.lo
  • ./configure --host=arm-linux-androidaebi --with-zlib --enable-ipv6
  • 制作/制作安装
  • 从 curl\lib.libs 添加生成的 libcurl.a
4

1 回答 1

0

好的,您的问题是您的库 libcurl.a 不是使用 Android ndk gcc 构建的。您已经完成了:

$ ./configure --host=arm-linux-androidaebi --with-zlib --enable-ipv6
$ make
$ make install

这将使用您的 PC gcc 生成一个库 ..不好。


我所做的是使用 line 命令(或像您所做的那样)为 android 配置开源库 l:

 ./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”中的所有源文件并将所有源文件放在一个库中:这里是 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)
于 2012-11-14T15:30:03.563 回答