2011-12-04 15 views
6

私は、https://github.com/eighthave/openssl-android にあるopen-sslソースを使用して、アンドロイドプロジェクトで使用できるライブラリを構築しています。 README.txtのに与えられた指示に従ってプラットフォーム2.1用のAndroid-opensslライブラリを構築する

、私は、Androidプラットフォームのバージョン2.2(レベル-8)

のためにそれをコンパイルすることができる午前しかし、私のアプリは2.1(レベル-7)互換性があるように、それを必要とします。

I試みdefault.propertiesファイル(https://github.com/eighthave/openssl-android/blob/master/default.properties

1)設定された目標=アンドロイド-7

2)設定された目標とオプションを以下=アンドロイド-5

をしかし、私はそれをコンパイルするときコマンドndk-buildを使用すると、次のエラーが発生します。

Compile thumb : crypto <= dsa_vrf.c 
    Compile thumb : crypto <= dso_dl.c 
    Compile thumb : crypto <= dso_dlfcn.c 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c: In function 'dlfcn_pathbyaddr': 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: 'Dl_info' undeclared (first use in this function) 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: (Each undeclared identifier is reported only once 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: for each function it appears in.) 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:445: error: expected ';' before 'dli' 
    /Crypto/openssl-android/crypto/dso/dso_dlfcn.c:455: error: 'dli' undeclared (first use in this function) 
    make: *** [obj/local/armeabi/objs/crypto/dso/dso_dlfcn.o] Error 1 

エラーメッセージごとに、Dl_infoは定義されていません。しかし、dso_dlfcn.cファイルに移動すると、構造体の定義はすでに提供されています。 (https://github.com/eighthave/openssl-android/blob/master/crypto/dso/dso_dlfcn.c

このコードは、デフォルトのプロパティファイルでtarget = android-8用にコンパイルされますが、android-7やandroid-5ではコンパイルされません。

このエラーを解決するために手伝ってください。アンドロイド2.1プラットフォームのためにそれをコンパイルするために、すべての変更を行う必要があることを私に教えてください。

ありがとうございます。

+0

前にも、[OpenSSLのとAndroid](HTTPSを持っていません:// wiki.openssl.org/index.php/Android)をOpenSSL wikiに追加してください。 – jww

答えて

6

はdso_dlfcn.cに次のコードを含めるようにしてください:

typedef struct { 
const char *dli_fname; /* Pathname of shared object that 
          contains address */ 
void  *dli_fbase; /* Address at which shared object 
          is loaded */ 
const char *dli_sname; /* Name of nearest symbol with address 
          lower than addr */ 
void  *dli_saddr; /* Exact address of symbol named 
          in dli_sname */ 
} Dl_info; 
int dladdr(const void *addr, Dl_info *info) { return 0; } 

する前に、次のライブラリが構築されている私の場合にはその後

#ifdef __linux 
# ifndef _GNU_SOURCE 
# define _GNU_SOURCE /* make sure dladdr is declared */ 
# endif 
#endif 

+0

ありがとう、図書館は正常に構築されます。 – Sushil

+0

あなたは大歓迎です!がんばろう! – Yury

+0

この問題はまだ存在します.. !!しかし、@ Yuriによって提案された回避策は私を助けました..ありがとう:) –

0

最新のNDKバージョンでインストールし、Application.mkファイルを適切に更新してください。

LOCAL_PATH := $(call my-dir) 
APP_PLATFORM := android-19 
NDK_TOOLCHAIN_VERSION := clang 
APP_ABI := armeabi-v7a 
APP_STL := gnustl_static 
APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions 
APP_CPPFLAGS += -DANDROID 
APP_PROJECT_PATH := $(shell pwd) 
APP_BUILD_SCRIPT := $(LOCAL_PATH)/../Android.mk 

上記の2つの問題は解決されます。

0

@ Yuriの解決策に1つの問題があり、それを少し改善する必要がありました。私のAPP_ABIは、Application.mkallに設定されています。私の場合、それはarmeabiarmeabi-v7aの間に私はx86mipsのためにも建てていることを意味しました。私はandroid-9ターゲットをAndroidのSDKにインストールして他のプロジェクトでも使用しています。 x86およびmipsは、android-9からndkでサポートされています。ドキュメントに書かれているように、ndk-buildがこれらのターゲットの構築を開始すると、自動的にandroid-9ターゲットに切り替わります。そして何? - はい、それはコンパイルに失敗します:-)。

  1. 暗号で/ Android.mkがラインlocal_c_flags := -DNO_WINDOWS_BRAINDEATHを見つける:ここに私のソリューションです。行の後にはhttp://pastebin.com/7euUVD7Aと書いてください。
  2. ユーリのコードがif definedに挿入する必要があります:ところでhttp://pastebin.com/V58gTSBU
  3. 、私は#include <openssl/dso.h>後ユーリのブロックを挿入したが、#ifdef __linux
関連する問題