2011-12-27 12 views
5

संकलन पार करते हैं Google प्रोटोकॉल बफर का उपयोग करने की मेरी समस्याएं दो भाग हैं, एक कंपाइलर विकल्पों के बारे में है, दूसरा क्रॉस संकलन है। बिल्ड मशीन एक पावर 6, 64 बिट है; मेजबान मशीन एक पावरपीसी 450, 32 बिट है। जीसीसी 4.1.2।Google प्रोटोकॉल बफर

मैं पॉवर मशीन जो पार संकलन की आवश्यकता है पर गूगल प्रोटोकॉल बफ़र्स स्थापित करने के लिए कोशिश कर रहा हूँ:

सबसे पहले समस्या संकलक विकल्पों के बारे में है। बिल्ड मशीन एक पावर 6, 64 बिट है; मेजबान मशीन एक पावरपीसी 450, 32 बिट है।

./configure --prefix=/home/where_to_install --host=powerpc-bgp-linux 

तो करते हैं, जांच करना, बनाना स्थापित करते हैं, सब कुछ ठीक: सबसे पहले मैं जो उपयोग करने के लिए संकलक बताने के लिए सीधे निर्माण मशीन पर स्थापित करने के लिए कोशिश की, विकल्पों के साथ। मुझे लगता है कि मैंने मेजबान मशीन निर्दिष्ट की है, जिसमें पर्याप्त जानकारी शामिल होनी चाहिए जो संकलन की आवश्यकता है। जब मैं

/bgsys/drivers/ppcfloor/gnu-linux/powerpc-bgp-linux/bin/g++ -g -zmuldefs -Xlinker -I/home/somewhere_installed/include $sourceFile -o $fileName -L/home/somewhere_installed/lib -lz -lstdc++ -lrt -lpthread -lm -lc -lprotobuf -lprotoc msg.pb.cc 

मैं दिया गया था त्रुटि के साथ मेरी कोड संकलन करने का प्रयास करें:

g++: unrecognized option '-zmuldefs' 
In file included from zht_util.h:20, 
       from hash-phm.cpp:9: 
meta.pb.h:9:42: error: google/protobuf/stubs/common.h: No such file or directory 

और common.h में चर के बारे में त्रुटि का एक बहुत नहीं पाए गए।

मुझे पता है क्योंकि यह संकलक विकल्प -zmuldefs को नहीं पहचानता है, इसलिए फ़ाइल सामान्य.h.h नहीं मिल सकती है। मैंने इसे गुगल किया और मुझे कोई स्पष्ट विचार नहीं मिला। मैं शिकायतकर्ता को विकल्प का उपयोग कैसे कर सकता हूं या फ़ाइल ढूंढ सकता हूं? या मेरे संकलन आदेश में कोई समस्या है?


दूसरी समस्या क्रॉस संकलन के बारे में है। Google प्रोटोकॉल बफर की रीडेमे फ़ाइल स्पष्ट रूप से संकलित करने के तरीके के बारे में स्पष्ट नहीं है। यह कहा गया है कि मुझे उपयोग करने के लिए कॉन्फ़िगर करने के लिए --with-protoc = protoc का उपयोग करना चाहिए, ठीक है, लेकिन इससे पहले मुझे होस्ट मशीन के लिए एक प्रति स्थापित करना होगा। मैं मेजबान

./configure --prefix=/home/where_to_install/built --host=powerpc-bgp-linux 

के लिए प्रतिलिपि स्थापित करने के लिए पहले कमांड का उपयोग करता हूं, फिर इंस्टॉल करें।

तब के रूप में मेजबान मशीन का उपयोग करता है जो नीचे एक ही संकलक का उपयोग करता है के साथ संकलन पार:

./configure --prefix=/home/tonglin/Installed/built_3 CC=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-gcc CXX=/bgsys/drivers/ppcfloor/gnu-linux/bin/powerpc-bgp-linux-g++ --host=powerpc-bgp-linux --with-protoc=/home/where_already_Installed/built/bin/protoc 

फिर बनाने के लिए और त्रुटि मिली:

जानकारी संकलन ... blabla का एक बहुत .....

collect2: ld returned 1 exit status 
make[3]: *** [protoc] Error 1 
make[3]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src' 
make[2]: *** [all] Error 2 
make[2]: Leaving directory `/gpfs/home/somewere/src/protobuf-2.4.1/src' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/gpfs/home/tonglin/Installed/src/protobuf-2.4.1' 
make: *** [all] Error 2 

मैंने गलत कहां किया? मैंने पहले इंस्टॉलेशन (होस्ट के लिए) में निर्दिष्ट कंपाइलर के साथ भी कोशिश की, यह एक ही त्रुटि मिली क्योंकि दूसरा इंस्टॉल ऊपर था। एक बार जब मैं इंस्टॉलेशन खत्म करने में सफल हो जाता हूं, तो मेरे पास दो इंस्टॉल होंगे, जिसका उपयोग मुझे करना चाहिए? क्या कोई मुझे एक उदाहरण दे सकता है कि मैं Google प्रोटोकॉल बफर संकलित कैसे कर सकता हूं? मुझे इसके बारे में कोई विस्तृत उदाहरण नहीं मिला।

धन्यवाद एक बहुत,

-Tony

+0

मुझे एक ही समस्या है ... मैं जेएनआई परत के माध्यम से एंड्रॉइड प्रोजेक्ट में प्रोटोबफ लिब को एकीकृत कर रहा हूं। मैं ट्यूटोरियल [सीपीपी_ProtoBuf] (https://developers.google.com/protocol-buffers/docs/cpptutorial) का पालन कर रहा हूं, लेकिन संकलन करते समय यह समान त्रुटि उत्पन्न करता है। ** jni /./ mysense/wrapper/addressbook.pb.h: 9: 42: घातक त्रुटि: google/protobuf/stubs/common.h: ऐसी कोई फ़ाइल या निर्देशक **। यहां कोई सुझाव है? – CoDe

उत्तर

5

मैं अपने दूसरे सवाल का जवाब देने की कोशिश करने के लिए जा रहा हूँ:

मैं अपने मेजबान मशीन पर क्रॉस संकलित जब मैं पहली बार यह स्थापित Protobuf पुस्तकालय ।यह अपेक्षाकृत सीधा है:

./configure --prefix=/usr 
make 
make check 
make install 

तो आपको इसे अपनी बिल्ड मशीन पर चलाना चाहिए।

make distclean 

बाद में या इस संकलन से कलाकृतियों को अगले निर्माण में हस्तक्षेप करना न भूलें।

अब मैं अपने अन्य मशीन के लिए इसे बनाने (निर्माण मशीन पर)

./configure --host=ppc CC=powerpc-none-linux-gnuspe-gcc CXX=powerpc-none-linux-gnuspe-g++ --with-protoc=protoc --prefix=/path/to/built/files 

साथ कॉन्फ़िगर करके फिर, हमेशा की तरह मेकअप कर जांच करने के लिए और बनाने के स्थापित करने और फ़ाइलों आप अपने अन्य मशीन के लिए नकल करने की जरूरत है में/पैच/टू/बिल्ट/फाइलें हैं।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मेरे पास होस्ट मशीनों तक सीधी पहुंच नहीं है हालांकि वे बिल्ड मशीन के साथ हार्ड ड्राइव साझा करते हैं, इसलिए मैं उन पर सीधे कुछ भी इंस्टॉल नहीं कर सकता। मैं क्या कर सकता हूं इसे संकलित करना और बिल्ड मशीन पर होस्ट संस्करण स्थापित करना है। मेजबान मशीन पर स्थापित करने से कोई अन्य समाधान? – Tony

+0

मुझे काफी समझ में नहीं आता है। तो आपके पास अपनी बिल्ड मशीन तक पहुंच है, लेकिन आपकी मेजबान मशीन पर नहीं? फिर आप अपनी मेजबान मशीन पर प्रोग्राम कैसे चलाते हैं? यदि आप उस मशीन पर सामान चला सकते हैं, तो आप साझा ड्राइव पर सब कुछ इंस्टॉल कर सकते हैं और उन्हें वहां चला सकते हैं। – dinyar

+0

हां, यह एक बड़ी मशीन है। मैं केवल हेड नोड तक पहुंच सकता हूं जो बिल्ड मशीन है, और मैं कोबाल्ट स्क्रिप्ट का उपयोग कर वर्क नोड्स (होस्ट मशीन) का उपयोग कर सकता हूं। शेल काम नोड्स पर समर्थित नहीं है। – Tony

0

पहला सवाल के लिए, आप संकलित और स्थापित करने के बाद

./configure --prefix=/your_dir 
make 
make check 
make install 

साथ Protobuf पुस्तकालय आप के तहत/your_dir/मैं ध्वज के साथ अपने makefile को शामिल शामिल पथ को जोड़ने की जरूरत है, उदाहरण के लिए

-I/your_dir/include