2011-12-04 41 views
6

Tôi đang sử dụng nguồn mở ssl được cung cấp tại https://github.com/eighthave/openssl-android để xây dựng thư viện có thể được sử dụng trong dự án Android.Xây dựng thư viện Android mở cho nền tảng 2.1

Theo hướng dẫn được đưa ra tại README.txt, tôi có thể biên dịch nó cho phiên bản nền tảng Android 2.2 (mức -8)

Nhưng ứng dụng của tôi đòi hỏi nó là 2.1 (mức -7) tương thích.

tôi đã cố gắng lựa chọn với default.properties tập tin (https://github.com/eighthave/openssl-android/blob/master/default.properties)

1) thiết lập target = android-7

2) đặt mục tiêu sau đây = android-5

Nhưng khi tôi biên dịch nó sử dụng lệnh ndk-build, nó cung cấp lỗi sau

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 

Theo thông báo lỗi- Dl_info không được xác định. nhưng nếu chúng ta đi đến tập tin dso_dlfcn.c, định nghĩa cho cấu trúc đã được cung cấp. (https://github.com/eighthave/openssl-android/blob/master/crypto/dso/dso_dlfcn.c)

Và mã này được biên dịch cho target = android-8 trong tệp thuộc tính mặc định chứ không phải cho android-7 hoặc android-5.

Yêu cầu bạn giúp tôi giải quyết lỗi này. và cho tôi biết tất cả những thay đổi cần được thực hiện để biên dịch nó cho nền tảng Android 2.1.

Xin cảm ơn trước.

+0

Bạn cũng có [OpenSSL và Android] (https: // wiki.openssl.org/index.php/Android) trên wiki OpenSSL. – jww

Trả lời

6

Cố gắng bao gồm các đoạn mã sau vào 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; } 

Trước:

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

Sau đó trong trường hợp của tôi thư viện được xây dựng.

+0

Xin cảm ơn, thư viện đã xây dựng thành công. – Sushil

+0

Bạn được chào đón! Chúc may mắn! – Yury

+0

Vấn đề này vẫn tồn tại .. !! Nhưng giải pháp được đề xuất bởi @Yuri đã cứu tôi .. Cảm ơn :) –

0

Hãy thử cài đặt với phiên bản NDK mới nhất và cập nhật tệp Application.mk một cách thích hợp.

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 vấn đề trên sẽ được giải quyết.

0

Tôi gặp một vấn đề với giải pháp @ Yuri và phải cải thiện nó một cách dễ dàng. My APP_ABI được đặt thành all trong Application.mk. Trong trường hợp của tôi, điều đó có nghĩa là trong số armeabiarmeabi-v7a Tôi cũng đang xây dựng cho x86mips. Tôi cũng đã cài đặt mục tiêu android-9 trong sdk android để sử dụng trong các dự án khác. x86mips được hỗ trợ bởi ndk bắt đầu từ android-9. Như được viết trong tài liệu, khi ndk-build sẽ bắt đầu tạo các mục tiêu này, nó sẽ tự động chuyển sang mục tiêu android-9. Vậy thì sao? - Có, nó sẽ không biên dịch :-). Đây là giải pháp của tôi:

  1. Trong crypto/Android.mk tìm dòng local_c_flags := -DNO_WINDOWS_BRAINDEATH. Sau khi viết dòng này http://pastebin.com/7euUVD7A.
  2. đang Yuri đã được chèn vào if defined: http://pastebin.com/V58gTSBU
  3. Bằng cách này, tôi đã chèn khối Yuri sau khi #include <openssl/dso.h> nhưng không phải trước khi #ifdef __linux
Các vấn đề liên quan