2011-12-04 16 views
6

मैं https://github.com/eighthave/openssl-android में दिया openssl स्रोत का उपयोग कर रहा एक पुस्तकालय जो एंड्रॉयड परियोजना में इस्तेमाल किया जा सकता है का निर्माण करने के लिए का निर्माण एंड्रॉयड-openssl पुस्तकालय।मंच 2.1

README.txt में दिए गए निर्देशों के अनुसार के रूप में, मैं Android प्लेटफ़ॉर्म वर्ज़न 2.2 के लिए यह संकलन करने में सक्षम हूँ (स्तर -8)

लेकिन मेरे एप्लिकेशन यह 2.1 (स्तर -7) संगत होना आवश्यक है।

मैंने कोशिश की निम्नलिखित 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)

और यह कोड डिफ़ॉल्ट गुण फ़ाइल में लक्ष्य = एंड्रॉइड -8 के लिए संकलित है, लेकिन एंड्रॉइड -7 या एंड्रॉइड -5 के लिए नहीं।

अनुरोध तुम मुझे इस त्रुटि को हल करने के लिए मदद करने के लिए। और मुझे बताएं कि एंड्रॉइड 2.1 प्लेटफ़ॉर्म के लिए इसे संकलित करने के लिए सभी परिवर्तनों को क्या करने की आवश्यकता है।

अग्रिम धन्यवाद।

+0

आप [OpenSSL और एंड्रॉयड] (https है: // ओपनएसएसएल विकी पर wiki.openssl.org/index.php/Android)। – 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 

मेरे मामले में पुस्तकालय बनाया गया है उसके बाद। नवीनतम NDK संस्करण के साथ स्थापित करने और Application.mk उचित रूप से फ़ाइल को अद्यतन करने के

+0

धन्यवाद, पुस्तकालय सफलतापूर्वक बनाता है। – Sushil

+0

आपका स्वागत है! सौभाग्य! – Yury

+0

यह समस्या अभी भी मौजूद है .. !! लेकिन @Yuri द्वारा सुझाए गए कामकाज ने मुझे बचाया .. धन्यवाद :) –

0

प्रयास करें।

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

मैं यूरी समाधान के साथ @ एक मुद्दा था और यह alittle में सुधार करने के लिए किया था। मेरा APP_ABIall पर Application.mk पर सेट है। मेरे मामले में इसका मतलब था कि armeabi और armeabi-v7a में मैं x86 और mips के लिए भी निर्माण कर रहा हूं। मेरे पास अन्य परियोजनाओं में उपयोग करने के लिए एंड्रॉइड एसडीके में android-9 लक्ष्य भी स्थापित है। x86 और mipsandroid-9 से शुरू NDK द्वारा समर्थित हैं। के रूप में किए गए दस्तावेज़ों में लिखा है, जब ndk-build इन लक्ष्यों का निर्माण शुरू होगा, यह android-9 लक्षित करने के लिए स्वचालित रूप से स्विच करेंगे। और क्या? - हाँ, यह संकलित करने में असफल हो जाएगा :-)। यहां मेरा समाधान है:

  1. क्रिप्टो/एंड्रॉइड.एमके में लाइन local_c_flags := -DNO_WINDOWS_BRAINDEATH खोजें। लाइन के बाद यह http://pastebin.com/7euUVD7A लिखें।
  2. यूरी के कोड if defined में सम्मिलित करने के होते हैं: http://pastebin.com/V58gTSBU
  3. वैसे, मैं #include <openssl/dso.h> के बाद यूरी के ब्लॉक डाला है लेकिन उससे पहले #ifdef __linux
संबंधित मुद्दे