1

私はすぐに私の問題を明らかにします。curl を Android に移植し、アプリ内で使用しようとしています。ARM ツールチェーンを使用して curl ライブラリを構築し、構成して作成しました (最初に何も問題がなかったことを確認するために数回行いました)。

次に、次の Android.mk が含まれている限り、新しく作成した libcurl.a と curljni.c を jni フォルダーに配置しました。

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_STATIC_LIBRARIES の代わりに LOCAL_WHOLE_STATIC_LIBRARIES を使用して、ライブラリ全体を Android アプリにロードするように要求しようとしましたが、それ以上の成功はありませんでした。

ここに画像の説明を入力

以前 :

  • ダウンロードしたcurl.7.28.0
  • ARM 4.6 用のスタンドアロン ツールチェーンを作成
  • 改行が DOS のようで、Unix のように必要な curl 内のいくつかのファイルを修正しました (configure のバグ) - そのうちの 1 つは libcurl_la-file.lo にリンクされた depcomp でした
  • ./configure --host=arm-linux-androidaebi --with-zlib --enable-ipv6
  • メイク/メイクインストール
  • 結果の libcurl.a を curl\lib.libs から追加しました
4

1 に答える 1

0

わかりました、あなたの問題は、あなたのライブラリ libcurl.a が Android ndk gcc でビルドされていないことです..

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

これにより、PC の gcc を使用してライブラリが生成されます。よくありません。


私がしていることは、ラインコマンドを使用して(またはあなたがしたように)Android用のオープンソースライブラリlを構成することです:

 ./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi

しかし、make と make install を呼び出すべきではありません。.

libcurl + jni ファイル 'curljni.c' 内のすべてのソース ファイルをコンパイルし、すべてを 1 つの lib に入れる android.mk を作成する必要があります。ここでは、SQLITE3 をコンパイルする Android.mk の例を示します。

###################################################
# 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 に答える