“undefined reference to”(function)& “在档案中不是一个对象”Android ndk-build

时间:2012-11-13 16:25:07

标签: android curl build android-ndk

我会很快暴露我的问题。我试图在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工具构建时,我都会获得以下内容:

enter image description here

注意:curljni.c调用li​​bcurl库及其easy.h和curl.h文件中的函数。然后将它们包含在文件的顶部。

我还尝试使用LOCAL_WHOLE_STATIC_LIBRARIES而不是LOCAL_STATIC_LIBRARIES来请求将整个库加载到我的Android应用中,但没有取得多大成功:

enter image description here

以前:

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

1 个答案:

答案 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)