2012-02-09 23 views
7

मैं एंड्रॉयड Cygwin का उपयोग कर के लिए पार संकलन आईसीयू स्थिर libs करना चाहते हैं। अब तक, मैं सिग्विन/एमएसवीसी और सिगविन संस्करणों को कॉन्फ़िगर और बनाने में सक्षम हूं। मैंने एंड्रॉइड-एनएनडी-आर 7 स्थापित किया है और टूलचेन्स निर्देशिका में जीसीसी का एक संस्करण देख सकता है। कई उदाहरण होस्ट का उपयोग करने का सुझाव देते हैं: arm-eabi - लेकिन यह मेरी मशीन पर मौजूद नहीं है।का उपयोग कर आईसीयू संकलन हाथ-linux-androideabi-4.4.3

मैं नकल की है MH-linux करने के लिए MH-अज्ञात/आईसीयू/स्रोत में/config और निम्नलिखित चलाएँ:

export HOST_ICU=/cygdrive/d/__/External/SQLite/icu 
export ICU_CROSS_BUILD=/cygdrive/d/__/External/SQLite/icu-cygwin 
export NDK_ROOT=/cygdrive/d/__/android-ndk-r7 
export CPPFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib" 
export CXXFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib" 
export CFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib" 
export LDFLAGS="-lc -Wl,-rpath-link=$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/ -L $NDK_ROOT/platforms/android-8/arch-arm/usr/lib/" 

$HOST_ICU/source/configure --with-cross-build=$ICU_CROSS_BUILD --enable-extras=no --enable-strict=no --enable-static --enable-shared=no --enable-tests=no --enable-samples=no --enable-dyload=no --enable-tools=no --host=arm-eabi --with-data-packaging=archive 

मैं निम्न त्रुटि:

checking for ICU version numbers... release 4.8.1.1, library 48.1.1, unicode version 6.0 
checking build system type... i686-pc-cygwin 
checking host system type... arm-unknown-eabi 
checking target system type... arm-unknown-eabi 
checking whether to build debug libraries... no 
checking whether to build release libraries... yes 
checking for arm-eabi-gcc... no 
checking for gcc... gcc 
checking whether the C compiler works... no 
configure: error: in `/cygdrive/d/Projects/__/External/SQLite/icu-android': 
configure: error: C compiler cannot create executables 
See `config.log' for more details 

मुझे यकीन है कि यह एक "बेवकूफ" सवाल यह है हूँ, लेकिन मैं कैसे आईसीयू कॉन्फ़िगर स्क्रिप्ट के तहत $ NDK_ROOT \ जीसीसी को इंगित करने के मिलता है toolchains \ हाथ-linux-androideabi-4.4.3 \ पहले से बनाए गए \ windows \ हाथ-linux-androideabi \ बिन? क्या मुझे कुछ सेटअप याद है या इंस्टॉल है? मैं अपने पथ की स्थापना ताकि पहले जीसीसी पाया हाथ-linux-androiedeabi में से एक है हो सकता है?

अद्यतन 1. मैं सिर्फ देखा है कि जबकि windows \ हाथ-linux = androideabi \ बिनजीसीसी, खिड़कियों में शामिल है \ बिनहाथ-linux-androideabi-जीसीसी शामिल हैं। मैं इसे कॉल करने के लिए आईसीयू कैसे प्राप्त करूं?

अद्यतन 2. स्टीवन आर लूमिस के सुझाव पर, मैं

http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD

से config.sub और config.guess के लिए अद्यतन उठाया रखा android-NDK-R7/toolchains/arm- लिनक्स androideabi-4.4.3/पहले से बनाए गए/विंडोज़/bin मेरे रास्ते में, और फिर से भाग गया साथ --host = हाथ-linux-androideabi कॉन्फ़िगर ... इस समय:

checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc 
checking whether the C compiler works... no 

निश्चित रूप से करीब। config.log

gcc version 4.4.3 (GCC) 
configure:3125: $? = 0 
configure:3114: arm-linux-androideabi-gcc -V >&5 
arm-linux-androideabi-gcc.exe: '-V' option must have argument 
configure:3125: $? = 1 
configure:3114: arm-linux-androideabi-gcc -qversion >&5 
arm-linux-androideabi-gcc.exe: unrecognized option '-qversion' 
arm-linux-androideabi-gcc.exe: no input files 
configure:3125: $? = 1 
configure:3145: checking whether the C compiler works 
configure:3167: arm-linux-androideabi-gcc -I/cygdrive/d/Projects/android-ndk-r7/platforms/android-8/arch-arm/usr/include 
/-O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib -I/cygdrive/d/Projec 
ts/android-ndk-r7/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF1 
6_STRING=0 -fno-short-enums -nostdlib -lc -Wl,-rpath-link=/cygdrive/d/Projects/android-ndk-r7/platforms/android-8/arch-a 
rm/usr/lib/ -L /cygdrive/d/Projects/android-ndk-r7/platforms/android-8/arch-arm/usr/lib/ conftest.c >&5 
D:/Projects/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/ 
4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lc 
collect2: ld returned 1 exit status 
configure:3171: $? = 1 
configure:3209: result: no 
configure: failed program was: 
| /* confdefs.h */ 
| #define PACKAGE_NAME "" 
| #define PACKAGE_TARNAME "" 
| #define PACKAGE_VERSION "" 
| #define PACKAGE_STRING "" 
| #define PACKAGE_BUGREPORT "" 
| #define PACKAGE_URL "" 
| /* end confdefs.h. */ 
| 
| int 
| main() 
| { 
| 
| ; 
| return 0; 
| } 
configure:3214: error: in `/cygdrive/d/Projects/__/External/SQLITE/icu-android': 
configure:3216: error: C compiler cannot create executables 
See `config.log' for more details 

अद्यतन से विस्तृत त्रुटि 3. परिवर्तन config.sub करने और config.guess है कि अब हम सही जीसीसी संकलक का उपयोग कर रहे में काम किया। -एलसी विफलता libc.so (जो एंड्रॉइड-एनएनडी-आर 7/प्लेटफॉर्म/एंड्रॉइड -8/आर्क-आर्म/यूएसआर/लिब में है "खोजने में सक्षम नहीं है, भले ही यह एलडीएफएलजीएस में है। मेरे पास मूल LDFLAGS में एल के बाद अतिरिक्त जगह है, लेकिन इस को दूर करने में http://groups.google.com/group/android-ndk/browse_thread/thread/46295616a889bc12

"The windows ndk toolchain is (thankfully) native to windows, so it doesnt go through the cygwin translation layer which would translate /cygdrive paths."

अद्यतन मदद नहीं की।

अद्यतन 4. एक पुराने पोस्ट के अनुसार 5. की/सभी उदाहरणों यात स्वॅप केलेले cygdrive/घ/साथ डी:।।।/अब सी संकलक काम करता है, हालांकि यह अभी भी नहीं है संदेह है कि ICU_CROSS_BUILD आईसीयू/स्रोत निर्देशिका में हो गया है

01,235,
checking whether the C compiler works... yes 
checking for C compiler default output file name... a.out 
checking for suffix of executables... 
checking whether we are cross compiling... yes 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether arm-linux-androideabi-gcc accepts -g... yes 
checking for arm-linux-androideabi-gcc option to accept ISO C89... none needed 
checking for arm-linux-androideabi-g++... arm-linux-androideabi-g++ 
checking whether we are using the GNU C++ compiler... yes 
checking whether arm-linux-androideabi-g++ accepts -g... yes 
checking how to run the C preprocessor... arm-linux-androideabi-gcc -E 
checking for a BSD-compatible install... /usr/bin/install -c 
checking for gmake... /usr/bin/gmake 
configure: error: D:/Projects/__/External/SQLite/icu-cygwin/config/icucross.mk not found. Please build ICU in 
D:/Projects/__/External/SQLite/icu-cygwin first. 

अद्यतन 6। मैं आईसीयू-साइगविन में अपने सिग्विन फ़ोल्डर को फिर से कॉन्फ़िगर और पुनर्निर्मित करता हूं। आंकड़े जाओ, इस बार icucross.mk वहाँ था। सफल विन्यास! लेकिन ...

अपडेट 7 इतनी अच्छी तरह से खत्म नहीं हुई करें।

$ make 
D:/Projects/__/External/SQLite/icu/source/config/mh-linux:41: *** target pattern contains no `%'. Stop. 

क्या?!? ऐसा लगता है कि अब हम Cygwin रास्तों फिर से चाहते हैं .. :(

अद्यतन 8. मेरी पथ बदल दिया ताकि HOST_ICU और ICU_CROSS_BUILD Cygwin रास्तों उपयोग करें, लेकिन NDK_ROOT विंडोज पथ (के बाद से एंड्रॉयड NDK ld cygwin पथ नहीं संभाल सकता है)।

इस समय आगे लेकिन

arm-linux-androideabi-gcc.exe: /cygdrive/d/Projects/__/External/SQLit                 e/icu/source/stubdata/stubdata.c: No such file or directory 
arm-linux-androideabi-gcc.exe: no input files 

लगता है कि क्या हो गया है कि हाथ-linux-androideabi-जीसीसी cygwin के लिए किए जाने की जरूरत है, या पार का निर्माण कार्य नहीं करेगा है।

अपडेट 9. ऐसा लगता है कि आर्म-लिनक्स-एंड्रोइडबी-जीसीसी साइगविन पथ का समर्थन नहीं करता है - हालांकि ndk_build करता है। हालांकि, आईसीयू आर्म-लिनक्स-एंड्रोइडबी-जीसीसी को कॉल करने के लिए तैयार है जबकि "मेक" को सिग्विन पथ की आवश्यकता होती है। ऐसा करने के लिए शायद ओएसएक्स या लिनक्स पर स्विच करने का समय हो सकता है।

अपडेट 10 - फिर भी कोई सफलता नहीं। सिगविन - स्पष्ट रूप से आर्म-लिनक्स-एंड्रोइडबी क्रिस्टैक्स बिल्ड -एल में साइगविन पथ का भी समर्थन नहीं करता है। सिग्विन के तहत क्रॉस-कंपाइल करने का प्रयास -एलसी त्रुटि देगा, क्योंकि यह पुस्तकालय के लिए -L/cygdrive/d/... पथ को पार्स नहीं कर सकता है। डी में बदलना:/मदद करता है, लेकिन बाद में कारण विफल हो जाते हैं क्योंकि यह सिगविन बनाता है।

लिनक्स - सामान्य एनडीके आर 7 निर्माण का उपयोग, विन्यास wchar_t = 0 त्रुटि के साथ विफल हो जाएगा। क्रिस्टैक्स एनडीके बिल्ड इसे ठीक करेगा, और एंड्रॉइड के sys/type.h में uint64_t के बारे में शिकायत करने में विफल रहेगा। ICU library in Android NDK देखें। आप इसे परिभाषित करने के लिए मजबूर कर सकते हैं और यह आकार मिलान के बारे में अभी तक एक और त्रुटि का कारण बन जाएगा।

ओएसएक्स - शायद आधिकारिक निर्माण या क्रिस्टैक्स बिल्ड का उपयोग करके संकलित सबसे सफल, यह सीधे uint64_t बग की ओर जाता है। यदि आप इसके आसपास हैक करते हैं, तो यह आपको

icu/source/common/ustrenum.cpp:118: error: must #include <typeinfo> before using typeid 

सहायता प्रदान करेगा!

+0

मैं एक प्रहार यहाँ ले रहा हूँ है। आप एक पुस्तकालय गायब हैं। लगता है कि आपके सी कंपाइलर लक्ष्य आर्किटेक्चर के लिए निर्माण नहीं कर सकते हैं। पुरानी बिल्ड स्क्रिप्ट इत्यादि – Vangel

+0

@Vangel इस बिंदु पर यह बिल्कुल ठीक है। arm-linux-androideabi-gcc -lc (libc.so) की तलाश में है जो/cygdrive/d/Projects/android-ndk-r7/प्लेटफॉर्म/एंड्रॉइड -8/आर्क-आर्म/lib/(जो निर्दिष्ट है -एल) लेकिन किसी भी तरह से यह नहीं मिल सकता है। स्क्रिप्ट के बाहर दोहराने की कोशिश कर रहा है, लेकिन यह सुनिश्चित नहीं है कि conftest.c – tofutim

+0

कहां मिलें, यह हो सकता है कि आर्म-लिनक्स-एंड्रोइडबी-जीसीसी साइगविन पथ को समझ नहीं सके? – tofutim

उत्तर

4

00. डाउनलोड एंड्रॉयड NDK http://developer.android.com/tools/sdk/ndk/index.html

उदाहरण install d:\android-r9b

01. डाउनलोड स्थापित उदाहरण d:\msys MSyshttp://www.mingw.org/wiki/MSYS 1,01

02. डाउनलोड जीसीसी 3.8.1 W64 http://mingw-w64.sourceforge.net/ उदाहरण स्थापित d:\mingw32_64

03. आईसीयू बनाम 52 डाउनलोड करें।1 http://site.icu-project.org/download/52#TOC-ICU4C-Download

04. निकालें आईसीयू स्रोत कोड d:\icu उपयोग करने के लिए

05. दर्ज msysexport PATH=/d/msys/1.0/bin:/d/ming32_64/mingw32/bin:$PATH

06.cd /d/icu;mkdir mingw;mkdir android;cd mingw

इस आईसीयू readme.html पार संकलन का पालन करें चरण

07.cd /d/icu/ming ;../source/runConfigureICU MinGW ;make

कोई समस्या नहीं, सभी काम कर रहा है और /d/icu/mingw/bin के तहत उत्पन्न पार करने के लिए उपकरण बाद में संकलन।

08.cd /d/icu/android

09./d/android-ndk-r9b/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/d/androidgcc/ -- toolchain=arm-linux-androideabi-4.8

उपयोग खिड़की 7/8 64 बिट अतिरिक्त विकल्प जोड़ते हैं: - system=windowx86_64

10. निर्यात PATH फिर से; export PATH=/d/msys/1.0/bin/:/d/androidgcc/bin/:/d/androidgcc/arm-linux-androideabi/bin/

पथ में पुस्तकालय बनाने के लिए ar.exe निष्पादन शामिल होना चाहिए।

11. साझा लाइब्रेरी बनाएं।

sh ../source/configure --host=armv6-google-linux --enable-shared=yes --disable-static -with-cross-build=/d/icu/mingw CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ AR=arm-linux-androideabi-ar --with-data-packaging=archive 

12.make

सभी सफल

+0

वैसे भी, अगर त्रुटि है langinfo.h त्रुटि नहीं मिल सकता है। आप इसे डाउनलोड कर सकते हैं: http://ftp.cc.uoc.gr/mirrors/OpenBSD/src/include/ डाउनलोड langinfo.hand nl_types.h/d/ic/source/common –

+0

सेव करें क्योंकि यह आपका है पहला जवाब, कृपया सही तरीके से जवाब देने के तरीके को देखने के लिए मेरे संपादन का निरीक्षण करें। एसओ और हैप्पी कोडिंग में आपका स्वागत है !!! –

+0

ये कदम बहुत उपयोगी थे। हालांकि इसे सफलतापूर्वक निर्माण करने के लिए मुझे चरण 11 में '' 'RANLIB = arm-linux-androideabi-ranlib'' 'जोड़ना पड़ा। – Bellinghammer