2013-07-21 7 views
70

GLFW3

बीती रात मैं देर से काम कर रहा था स्रोत से लिनक्स के लिए GLFW 3 संकुल बनाने की कोशिश में इसका उपयोग करना। इस प्रक्रिया ने मुझे कुल मिलाकर लगभग 3 घंटे, आंशिक रूप से क्योंकि मैं सीएमके से अपरिचित हूं, और आंशिक रूप से क्योंकि मैं जीएलएफडब्ल्यू से अपरिचित हूं।का निर्माण कैसे और GLFW 3 स्थापित करने और एक लिनक्स परियोजना

मुझे आशा है कि यह पोस्ट आपको कल की कठिनाई से बचाएगा! मैंने सोचा कि मुझे एक छोटा सा लिखना चाहिए, और उम्मीद है कि आपको अपने जीवन के कई घंटे बचाएंगे ...

#glfw आईआरसी चैनल पर "urraka", "b6" और "niklas" के लिए धन्यवाद, मैं रहा हूं glfw संस्करण 3.0.1 काम करने में सक्षम।

यह पता चला है कि यह एक छोटी सी प्रक्रिया नहीं है (निश्चित रूप से मेरे लिए नहीं, मैं कोई विशेषज्ञ नहीं हूं) क्योंकि glfw3 के बारे में वेब पर अधिक दस्तावेज नहीं है, खासकर इसे सीएमके के साथ स्थापित करने के बारे में।

मुझे इसे एक प्रश्न और उत्तर अनुभाग में विभाजित करने के लिए कहा गया था, और इसलिए मैंने इसे किया है, और उत्तर भाग अब नीचे हैं।

क्या आप जीएलएफडब्ल्यू, या जीएलएफडब्ल्यू टीम के सदस्य हैं?

यदि जीएलएफडब्ल्यू 3 के किसी भी रखरखावकर्ता इसे देखते हैं, तो उनके लिए मेरा संदेश कृपया "अपनी वेबसाइट पर विंडोज़, मैक ओएस एक्स और लिनक्स" अनुभाग पर जीएलएफडब्ल्यू 3 स्थापित करना है! जीएलएफडब्ल्यू के साथ कार्यक्रम लिखना काफी आसान है, क्योंकि ऑनलाइन दस्तावेज काफी अच्छा है, सभी उपलब्ध वर्गों और मॉड्यूल का त्वरित स्कैन और आप जाने के लिए तैयार होंगे। एक परीक्षण परियोजना का उदाहरण here भी बहुत अच्छा है। मुझे मिली दो मुख्य समस्याएं थीं, सबसे पहले मैं अपने सिस्टम पर जीएलएफडब्ल्यू 3 कैसे स्थापित करूं, और दूसरी बात यह है कि मैं एक जीएलएफडब्लू 3 प्रोजेक्ट कैसे बना सकता हूं? ये दो चीजें शायद एक गैर-विशेषज्ञ के लिए काफी स्पष्ट नहीं हैं। ऐसा लगता है जैसे अगर GLFW वेबसाइट भारी बदलाव आया है के बाद से मैं पिछले देखा और वहाँ अब GLFW और buliding कार्यक्रमों संकलन पर एक अनुभाग है:

संपादित

एक संक्षिप्त देखो आज (2014-01-14 तिथि) था जीएलएफडब्ल्यू के साथ, जो मुझे लगता है कि नया है।

+0

इसे यहां डालने के लिए धन्यवाद - जाहिर है कि इसमें बहुत सारे काम हुए हैं। क्या आप इसे किसी प्रश्न में विभाजित करना चाहते हैं और उत्तर दें? आप अपना खुद का उत्तर अपने प्रश्न में जोड़ सकते हैं और इसे सही के रूप में चिह्नित कर सकते हैं। – Fraser

+0

@ फ़्रेसर हाँ हां, अगर आपको लगता है कि यह बेहतर होगा – user3728501

+1

मैं दूसरा हूं। मुझे जीएलएफडब्ल्यू बहुत पसंद है लेकिन वास्तव में निराश था कि मैक के तहत v3 को संकलित करने के तरीके के बारे में कोई दस्तावेज नहीं मिला है। – user18490

उत्तर

97

चरण 1: इस के लिए CMake

साथ अपने सिस्टम पर GLFW 3 स्थापित कर रहा है, स्थापित मैं Kubuntu 13.04 64 बिट का उपयोग कर किया गया था।

पहला कदम www.glfw.org से नवीनतम संस्करण (भविष्य में काम को समान तरीके से मानते हुए) डाउनलोड करना है, शायद इस link का उपयोग कर।

अगला चरण संग्रह निकालने और टर्मिनल खोलना है। cd glfw-3.X.X निर्देशिका में और cmake -G "Unix Makefiles" चलाएं, आपको ऊंचे विशेषाधिकारों की आवश्यकता हो सकती है, और आपको को निर्माण निर्भरताओं को पहले इंस्टॉल करने की आवश्यकता हो सकती है। ऐसा करने के लिए, कोशिश sudo apt-get build-dep glfw याsudo apt-get build-dep glfw3या मैन्युअल रूप से इसे करते हैं के रूप में मैं sudo apt-get install cmake xorg-dev libglu1-mesa-dev का उपयोग कर था ... इस तरह के pthread पुस्तकालयों के रूप में अन्य libs आप की आवश्यकता हो सकती है ... जाहिर है मैं उन्हें पहले से ही था। (नीचे -l विकल्प जी ++ लिंकर चरण के लिए दिया देखें।)

अब आप make और फिर make install टाइप कर सकते हैं, जो संभवत: sudo पहले करने की आवश्यकता होगी।

ठीक है, आपको पिछले तीन सीएमके चरणों में कुछ वर्बोज़ आउटपुट प्राप्त करना चाहिए, आपको बता रहा है कि क्या बनाया गया है या कहां रखा गया है। (/usr/include, उदाहरण के लिए।)

चरण 2: एक परीक्षण कार्यक्रम बना सकते हैं और संकलन

अगले कदम vim ऊपर सक्रिय किया जाता है (यदि आप कहते हैं कि "क्या vim ?! ?!") या अपने पसंदीदा आईडीई/पाठ संपादक ... मैंने विम का उपयोग नहीं किया, मैंने केट का इस्तेमाल किया, क्योंकि मैं कुबंटू 13.04 पर हूं ... वैसे भी, परीक्षण कार्यक्रम को डाउनलोड करें या कॉपी करें here (पृष्ठ के निचले हिस्से में) और सेव करें, बाहर निकलें।

अब g++ -std=c++11 -c main.cpp का उपयोग कर संकलन - यकीन नहीं करता है, तो C++ 11 आवश्यक लेकिन मैं nullptr हां, तो मैं यह आवश्यक इस्तेमाल किया ... आप संस्करण 4.7, या आगामी संस्करण 4.8 करने के लिए अपने जीसीसी अपग्रेड करना पड़ सकता है .. उस here पर जानकारी।

फिर यदि आपने प्रोग्राम को हाथ से टाइप किया है या "बहुत चालाक" होने का प्रयास किया है और कुछ काम नहीं किया है तो अपनी त्रुटियों को ठीक करें ... फिर इस राक्षस का उपयोग करके इसे लिंक करें! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi तो आप "बिल्ड बिल्ड निर्भरता स्थापित करें" भाग में देखते हैं, आप यह भी जांचना चाहेंगे कि आपके पास जीएल, जीएलयू, एक्स 11 एक्सएक्सएफ 86 वीएम (जो कुछ भी है) Xrandr posix-thread और Xi (जो कुछ भी है) विकास पुस्तकालय स्थापित भी। शायद आपके ग्राफिक्स ड्राइवरों को भी अपडेट करें, मुझे लगता है कि जीएलएफडब्लू 3 को ओपनजीएल संस्करण 3 या उच्चतर की आवश्यकता हो सकती है? शायद कोई इसकी पुष्टि कर सकता है? यदि आपको dlclose (@ user2255242 पर क्रेडिट) के अपरिभाषित संदर्भ प्राप्त हो रहे हैं, तो आपको लिंकर विकल्प -ldl -lXinerama -lXcursor को सही तरीके से काम करने के लिए भी जोड़ना पड़ सकता है।

और, हाँ, मुझे वास्तव में बहुत से -l एस की आवश्यकता है!

चरण 3: आप समाप्त हो गए हैं, आपका दिन शुभ हो!

उम्मीद है कि यह जानकारी सही थी और सबकुछ आपके लिए काम करता था, और आपने जीएलएफडब्लू परीक्षण कार्यक्रम लिखने का आनंद लिया। यह भी उम्मीद है कि इस गाइड ने भविष्य में कुछ लोगों की मदद की है, या मदद करेंगे जो कल थे!

वैसे, सभी टैग स्टैक ओवरफ्लो पर खोजी गई चीजें हैं जो एक ऐसे उत्तर की तलाश में हैं जो अस्तित्व में नहीं था। (अब तक।) उम्मीद है कि वे वही हैं जो आपने खोजा है यदि आप मेरे लिए समान स्थिति में थे।

+0

मैंने इसे समझने के लिए घंटों बिताए। यह जवाब मेरे लिए काम किया: उबंटू 13.04, x64। नेटबीन सी ++ आईडीई (प्रोजेक्ट प्रॉपर्टीज में लिंकर लाइन जोड़ें-> बिल्ड-> लिंकर-> लाइब्रेरीज़-> विकल्प जोड़ें-> अन्य विकल्प - अन्यथा निर्देशों का पालन करें वर्बैटिम) –

+0

जाहिर है (जीएलएफडब्ल्यू 3.0.3 के साथ) कुछ 'पाउ' का उपयोग करता है संकलन विकल्पों में '-lm' जोड़कर इसे ठीक किया गया। –

+1

एडवर्ड, धन्यवाद। मुझे इस सैनिटी-चेक की ज़रूरत थी कि सभी आवश्यकताओं को पूरा करने का मतलब यह नहीं था कि मैं कुछ गलत कर रहा था। – rangu

16

ध्यान दें कि यदि आप BUILD_SHARED_LIBS विकल्प के साथ glfw इंस्टॉल करते हैं तो आपको -l एस की आवश्यकता नहीं है। (आप ccmake पहले चलकर इस विकल्प को सक्षम कर सकते हैं)।
इस प्रकार sudo make install/usr/local/lib/ligglfw.so में साझा लाइब्रेरी इंस्टॉल करेगा। फिर आप एक साधारण के साथ उदाहरण फ़ाइल संकलन कर सकते हैं:

g++ main.cpp -L /usr/local/lib/ -lglfw 

फिर अपने कार्यक्रम चलाने से पहले साझा पुस्तकालयों के लिए जोड़ने के लिए/usr/स्थानीय/lib खोज पथ के लिए/मत भूलना। इस का उपयोग किया जा सकता है:

export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} 

और तुम रख सकते हैं कि आपके ~/.bashrc में तो आप इसे हर समय टाइप करने के लिए नहीं है।

+1

का आर्क लिनक्स कमांड क्या है यह जानकारी उन लोगों के लिए वास्तव में महत्वपूर्ण है जो संकलन और चलाने के लिए टर्मिनल का उपयोग करने के बजाय एक आईडीई सेट करना चाहते हैं; क्या आप इसे कैसे करें इसके बारे में अधिक जानकारी दे सकते हैं? मैंने कोशिश की लेकिन सभी –

+0

नोब पर सफल नहीं है! मुझे पता है कि यह थोड़ा पुराना है, लेकिन यह वास्तव में मेरी मदद करता है। क्या कोई समझा सकता है (या किसी को समझाने के लिए लिंक) साझा लाइब्रेरी का उपयोग क्यों कर रहा है, इसलिए हमें उन सभी अन्य पुस्तकालयों को लिंक करने की ज़रूरत नहीं है, जिनमें से कई ऑब्जेक्ट फाइलें भी साझा की गई हैं? इसके अलावा, मुझे संकलन के बाद [LD_LIBRARY_PATH चर सेट करना था] (https://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html), या जब मैं कोशिश करता हूं तो gnu त्रुटियों के क्रोध का सामना करना पड़ता था मेरे नए संकलित निष्पादन योग्य चलाओ। – Sammaron

+1

हाय सममारन, एलडी_LIBRARY_PATH के बारे में बात करने के लिए धन्यवाद, मैं इसे शामिल करने के लिए अपना उत्तर अपडेट करूंगा। Glfw लाइब्रेरी का उपयोग करते समय आपको अन्य सभी पुस्तकालयों को निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि glfw पहले से ही उन्हें लोड करता है। प्रोग्राम चलाने के दौरान आप कौन से लाइब्रेरी लोड होते हैं, यह जांचने के लिए आप 'ldd' कमांड का उपयोग कर सकते हैं। यह जांचने का भी एक अच्छा तरीका है कि पुस्तकालय ठीक से पाए जाते हैं। आप तुलना करने के लिए अपने प्रोग्राम पर 'ldd' और /usr/local/lib/libglfw.so पर उपयोग कर सकते हैं। – CastleDefender

13

I solved it in this way

एक pkg-config फ़ाइल के लिए सभी आवश्यक संकलन समय और कड़ी समय झंडे और निर्भरता एक पुस्तकालय का उपयोग करने के लिए आवश्यक वर्णन करता है।

pkg-config --static --libs glfw3 

मुझे पता चलता है कि

-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp 

मैं अगर इन सभी libs वास्तव में संकलन के लिए आवश्यक हैं पता नहीं है लेकिन मेरे लिए यह काम करता है ...

+2

यह उत्तर एक जरूरी है। मुझे पहले pkg-config के बारे में पता नहीं था। लेकिन आज से मैं इसे अंत तक उपयोग करूँगा, क्योंकि इससे मुझे किसी प्रकार की लिंकिंग निर्भरता समस्या हल करने में मदद मिलेगी। इस तरह के एक अद्भुत जवाब के लिए धन्यवाद। –

2

महान गाइड, धन्यवाद। यहां अधिकांश निर्देश दिए गए हैं, यह लगभग मेरे लिए बनाया गया था लेकिन मेरे पास एक शेष त्रुटि थी।

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5' 
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 

इस त्रुटि के लिए खोज के बाद, मैं कमांड लाइन के लिए -ldl जोड़ने के लिए किया था।

g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl 

फिर "हैलो GLFW" नमूना अनुप्रयोग संकलित और जुड़े।

मैं लिनक्स के लिए काफी नया हूं इसलिए मैं पूरी तरह से निश्चित नहीं हूं कि यह अतिरिक्त लाइब्रेरी क्या करती है ... मेरी लिंकिंग त्रुटि को ठीक करने के अलावा। मैं देखता हूं कि ऊपर पोस्ट में cmd ​​लाइन स्विच, हालांकि।

version=X.X.X && \ 
wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.zip" && \ 
unzip glfw-${version}.zip && \ 
cd glfw-${version} && \ 
sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \ 
sudo cmake -G "Unix Makefiles" && \ 
sudo make && \ 
sudo make install 

हैं:

+0

मुझे .o और .exec फ़ाइल मिली .. कृपया मेरी मदद करें, इसे कैसे चलाएं? –

2

के बाद से स्वीकार किए जाते हैं जवाब अधिक संपादन की अनुमति नहीं है, मैं एक ही कॉपी-पेस्ट कमांड (नवीनतम पहले आदेश में उपलब्ध संस्करण के साथ XXX की जगह) के साथ यह संक्षेप में प्रस्तुत करने जा रहा हूँ आप प्रोग्राम को निम्न आदेशों का उपयोग करना चाहते हैं:

g++ -std=c++11 -c main.cpp && \ 
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor 
+0

शानदार! जीएलएफडब्ल्यू v3.2.1 के साथ उबंटू 16.04 पर मेरे लिए काम किया।केवल दो मामूली सुधार: सेट संस्करण = एक्स.एक्स.एक्स केवल संस्करण = "एक्स.एक्स.एक्स" होना चाहिए और इस लाइन के अंत में कोई .zip नहीं होना चाहिए: cd glfw - $ {version} .zip – Tim

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