我會盡快公開我的問題。我試圖在Android上移植curl並在我的應用中使用它。我用ARM工具鏈構建了捲曲庫,並進行了配置和製作(幾次以確保我第一次沒有做錯任何事情)。「對檔案中的」(函數)&「的未定義引用不是對象」Android ndk-build
我然後繼續把新創建的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的構建工具,我得到如下:
注:curljni.c使得函數調用libcurl庫中和它的easy.h和curl.h文件。然後它們被包含在文件的頂部。
我也試着問整個庫獲取加載到我的Android應用程序,使用LOCAL_WHOLE_STATIC_LIBRARIES代替LOCAL_STATIC_LIBRARIES,但沒有更多的成功:
以前:
- 下載curl.7.28.0
- 爲ARM 4.6製作了獨立工具鏈
- 修復了curl中的幾個文件,它們的linebreaks是DOS的,並且需要Unix(配置中的bug) - 其中一個是depcomp,鏈接到libcurl_la-file.lo
- ./configure --host = arm-linux- androidaebi - -with-的zlib --enable-IPv6的
- 化妝/ make install的
- 增加從產生libcurl.a捲曲\ lib.libs
我用了一個下載的.a文件,它工作。但是,我不知道我自己的.a版本有什麼錯誤。 – PeterGriffin
「存檔中的成員......不是對象」,未定義的引用(即未找到符號)的問題聽起來像一個架構問題,即仔細檢查你構建libcurl的方式,以便靜態庫包含'armeabi'目標文件。特別要確保它使用Android工具鏈中的編譯器(請參見幻燈片34,35和36:https://speakerdeck.com/deltheil/running-native-code-on-android-number-osdcfr-2012)。 – deltheil
當我使用交叉工具鏈(尚未使用SYSROOT和BUILD)時,我沒有指定CC和CXX,當我有時間的時候我會放棄它。感謝您的鏈接。 – PeterGriffin