Сборка Android-openssl библиотеки для платформы 2.1 - PullRequest
6 голосов
/ 05 декабря 2011

Я использую исходный код open-ssl, указанный на https://github.com/eighthave/openssl-android построить библиотеку, которая может быть использована в проекте Android.

В соответствии с инструкциями, приведенными на README.txt, я могу скомпилировать его для платформы Android версии 2.2 (уровень -8)

Но мое приложение требует, чтобы оно было совместимо с 2.1 (уровень -7).

Я попробовал следующие параметры с файлом default.properties (https://github.com/eighthave/openssl-android/blob/master/default.properties)

1) установить цель = Android-7

2) установить цель = 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.

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 22 декабря 2011

Попробуйте включить в 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 голосов
/ 16 августа 2015

У меня была одна проблема с решением @ Yuri, и мне пришлось немного ее улучшить. Мой APP_ABI установлен на all в Application.mk. В моем случае это означало, что среди armeabi и armeabi-v7a я строю также для x86 и mips. У меня также android-9 target установлен в Android SDK для использования в других проектах. x86 и mips поддерживаются ndk начиная с android-9. Как написано в документации, когда ndk-build начнет строить эти цели, он автоматически переключится на цель android-9. И что? - Да, он не скомпилируется :-). Вот мое решение:

  1. В crypto / 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
0 голосов
/ 10 апреля 2015

Попробуйте установить последнюю версию 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 проблемы будут решены.

...