मैं एंड्रॉयड 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
सहायता प्रदान करेगा!
मैं एक प्रहार यहाँ ले रहा हूँ है। आप एक पुस्तकालय गायब हैं। लगता है कि आपके सी कंपाइलर लक्ष्य आर्किटेक्चर के लिए निर्माण नहीं कर सकते हैं। पुरानी बिल्ड स्क्रिप्ट इत्यादि – Vangel
@Vangel इस बिंदु पर यह बिल्कुल ठीक है। arm-linux-androideabi-gcc -lc (libc.so) की तलाश में है जो/cygdrive/d/Projects/android-ndk-r7/प्लेटफॉर्म/एंड्रॉइड -8/आर्क-आर्म/lib/(जो निर्दिष्ट है -एल) लेकिन किसी भी तरह से यह नहीं मिल सकता है। स्क्रिप्ट के बाहर दोहराने की कोशिश कर रहा है, लेकिन यह सुनिश्चित नहीं है कि conftest.c – tofutim
कहां मिलें, यह हो सकता है कि आर्म-लिनक्स-एंड्रोइडबी-जीसीसी साइगविन पथ को समझ नहीं सके? – tofutim