为平台2.1构建Android-openssl库

时间:2011-12-04 20:50:50

标签: android java-native-interface openssl android-ndk shared-libraries

我使用https://github.com/eighthave/openssl-android处给出的open-ssl源代码 构建一个可以在android项目中使用的库。

根据README.txt提供的说明,我能够为Android平台版本2.2(级别-8)编译它

但我的应用要求它与2.1(级别-7)兼容。

我尝试使用default.properties文件(https://github.com/eighthave/openssl-android/blob/master/default.properties

执行以下选项

1)设置target = android-7

2)设置target = android-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。

请求您帮我解决此错误。并让我知道为了编译Android 2.1平台需要做些什么更改。

提前致谢。

2 个答案:

答案 0 :(得分: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

在我的情况下,之后构建了库。

答案 1 :(得分: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个问题将得到解决。