2015-05-27 4 views
17

के लिए संकलन और उपयोग को बढ़ावा दें I एंड्रॉइड एनडीके के लिए बूस्ट का संकलन और उपयोग कैसे करें? मैंने बीजेएम फ़ाइल के साथ इसे संकलित करने के लिए Boost for Android से ऑनलाइन जो कुछ भी पाया है, मैंने कोशिश की है। हालांकि, मैं सफल नहीं हूं। एंड्रॉयड NDK R10e साथएंड्रॉइड एनडीके R10e

error: toolset gcc initialization: 

error: version 'androidR10e' requested but 'g++-androidR10e' not found and version '4.2.1' of default 'g++' does not match 
error: initialized from /path/to/android-ndk-r10e/sources/boost/tools/build/v2/user-config.jam:86 

किसी को भी सफलतापूर्वक इस्तेमाल किया गया है बूस्ट: जब मैं bjam के साथ यह संकलन की कोशिश, मैं निम्नलिखित त्रुटि मिलती है?

और जब मैं इसे संकलित कर सकता हूं, तो मुझे अपने एंड्रॉइड ऐप प्रोजेक्ट में इसका उपयोग करने के लिए कैसे करना चाहिए?

उत्तर

6

हम इसे एनडीकेआर 10 डी के लिए संकलित करने में कामयाब रहे। यह एनडीकेआर 10 के लिए समान होना चाहिए। प्रोजेक्ट-config.bjam एनडीके से जीसीसी कंपाइलर को इंगित करना चाहिए। हमारा इस तरह दिखता है:

import option ; 
using gcc : arm : D:\\android\\ndk\\toolchains\\arm-linux-androideabi-4.9\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-g++.exe ; 
option.set keep-going : false ; 

तो बस बी 2 के साथ संकलन, एंड्रॉयड के लिए पथ कह में शामिल हैं:

b2 --reconfigure <your options> 
    toolset=gcc-arm 
    include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\include 
    include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\libs\<target platform>\include 
    include=<ndk folder>\platforms\<android api version>\arch-arm\usr\include 
    install --libdir=stage\lib\<target platform> 

हम के बारे में ndkr10e को स्थानांतरित करने के लिए। क्या आप बता सकते हैं कि बूस्ट अभी भी इसके साथ काम करता है? :)

+0

मैंने पाया एक प्रीबिल्ट बूस्ट लाइब्रेरी का उपयोग कर समाप्त हुआ। यह काम करता है लेकिन मैं आपकी सलाह के साथ संकलन करने की कोशिश करूंगा। धन्यवाद! https://github.com/emileb/Boost-for-Android-Prebuilt – BSod

+3

क्या आप संचालन के बारे में थोड़ा और सटीक हो सकते हैं? उदाहरण के लिए मेरे पास प्रोजेक्ट-config.bjam फ़ाइल नहीं है। – Antonio

2

सबसे आसान तरीका CrystaX NDK का उपयोग करना होगा, जिसमें पहले से ही निर्मित और उपयोग करने योग्य बूस्ट पुस्तकालय शामिल हैं। और यहां उदाहरण हैं कि क्रिस्टाक्स एनडीके के साथ बूस्ट का उपयोग कैसे करें: 1, 2

+0

नहीं, ** क्रिस्टैक्स-एनडीके -10.3.1 ** में कोई बूस्ट लाइब्रेरी फ़ोल्डर नहीं है। –

0

मैं केवल 10d के साथ निर्माण करने में कामयाब रहा। क्रॉस संकलन लिनक्स-> एंड्रॉइड Boost for Android का उपयोग कर सीधे इसके साथ काम किया।

एक से थोड़ा पुराना NDK डाउनलोड करने के लिए, के रूप में नहीं सभी NDK तुरंत Boost for Android द्वारा समर्थित हैं, तो आप इस मार्गदर्शिका का उपयोग कर सकते हैं: Where do I find old versions of Android NDK?

नोट: मैं भी toolchain निर्दिष्ट करने के लिए करना चाहता था।

  1. build-android.sh में, बस रेखा से ऊपर यहाँ उल्लेख के बाद:

    Toolchain = $ {Toolchain: -arm-linux-androideabi-4.9} मैं 2 स्थानों में यह करना ही था

  2. कमांड लाइन में

    बैश build-android.sh [NDK स्थान] --toolchain = हाथ-linux-androideabi-4,9

वास्तव में, यह बेहतर काम करता है जब मैंने निर्दिष्ट किया कि --with-libraries=[comma separated list] के साथ मैं कौन सा बढ़ावा घटक चाहता हूं।

बजाय मैं सब कुछ का निर्माण होगा, तो मैं मिलेगा:

...failed updating 38 targets...

...skipped 6 targets...

...updated 10568 targets...

ERROR: Failed to build boost for android!

Done!

1

बढ़ावा दिशाओं के बाद, मैं Ubuntu 12.04 (पर NDKr10e साथ बढ़ावा 1.60 निर्माण करने में सक्षम था, हालांकि मुझे लगता है बहुत कम मेजबान सिस्टम पर निर्भर करता है)। यहां मेरे नोट्स हैं:

बूस्ट स्रोत टैरबॉल प्राप्त करें और अनपैक करें (मैंने 1.60 का उपयोग किया): boost_1_60_0.tar।BZ2

[email protected]:/scratch/moskewcz/android/src$ ll 
total 74M 
drwx------ 10 moskewcz moskewcz 4.0K Mar 9 14:14 boost_1_60_0 
-rw-rw-r-- 1 moskewcz moskewcz 74M Jan 5 11:15 boost_1_60_0.tar.bz2 

पालन को बढ़ावा देने में यूनिक्स पर "का निर्माण कस्टम बाइनरी" खंड

शुरू हो रही है स्थापित करने के लिए एक ताजा, खाली जड़ का उपयोग निर्देश b2 अर्थात/खरोंच/बढ़ावा देने-निर्माण जड़; उपसर्ग के रूप में usr का उपयोग करें; फिर से बढ़ावा निर्देशों का पालन: कुछ jamfile में

[email protected]:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./bootstrap.sh 
[email protected]:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./b2 install --prefix=/scratch/moskewcz/android/boost-build-root/usr 

डाल b2 पथ में (फिर से निर्देशों के अनुसार)

export PATH=/scratch/moskewcz/android/boost-build-root/usr/bin:$PATH 

(मुझे कोई ~/उपयोगकर्ता के config.jam था, तो मैं एक बनाया है और इसका इस्तेमाल किया गया है, हो सकता है कि बनाने/संपादित करने के लिए जामफाइल का बेहतर विकल्प हो) कुछ जेम-कोड (?) को एक जीसीसी संस्करण (टूलसेट) को परिभाषित करने के लिए एक स्टैंडअलोन टूलचेन से g ++ को इंगित करने के लिए जोड़ें। ध्यान दें कि यह 'एक स्टैंडअलोन टूलचेन' दिशाओं के बाद सामान्य फैशन में एनडीके के साथ बनाई गई टूलचैन है। मैं नहीं एक ग्राम ++ NDK ही अंदर की ओर इशारा करते हूँ (कि या काम नहीं हो सकता है, मुझे पता नहीं):

import option ; 
using gcc : arm_linux_android_4.9 : /scratch/android-stc/bin/aarch64-linux-android-g++ ; 
option.set keep-going : false ; 

ज्यादातर के रूप में दिशा-निर्देश के अनुसार, परियोजना जड़ को बढ़ावा देने और निर्माण करने के लिए जाना। --बिल्ड-डीआईआर वैकल्पिक हो सकता है? भी -j8 करने के लिए जोड़ा ||

[email protected]:/scratch/moskewcz/android/src/boost_1_60_0$ b2 -j8 --build-dir=bin.v2 toolset=gcc-arm_linux_android_4.9 stage 

टिप्पणी का निर्माण है कि यह डिफ़ॉल्ट रूप से दोनों स्थिर और साझा libs का निर्माण करने की कोशिश करता है, लेकिन इमारत साझा libs librt.so नहीं होने android के कारण विफल हो जाता है - मेरी शोध के अनुसार, लोगों का दावा है कि एंड्रॉयड के तहत (कुछ ?) librt.so की कार्यक्षमता libc.so के अंदर है - इसलिए एंड्रॉइड के लिए साझा libs बनाने के लिए लिंकिंग चरणों से आसानी से निकालना ठीक हो सकता है। मैंने इसका प्रयास नहीं किया। देखें:

https://code.google.com/p/android/issues/detail?id=5730

Building Boost for Android with error "cannot find -lrt"

0

यहाँ: http://silverglint.com/boost-for-android/ आप एंड्रॉयड के लिए बढ़ावा का एक आधुनिक (जैसे 1.64.0) संस्करण बनाने के लिए एक सरल और दर्द रहित नया तरीका मिल सकता है। क्लैंग और जीसीसी के साथ काम करता है।

भी एक नमूना ऐप शामिल है जो आपको दिखाता है कि इस प्रकार निर्मित बूस्ट बाइनरी का उपयोग कैसे करें।

संबंधित मुद्दे