2015-11-17 9 views
5

से डीएसओ गुम है मुझे हाल ही में अपने पीसी पर लिनक्स मिंट को पुनर्स्थापित करना पड़ा। मैंने जीएलएफडब्लू जैसे सभी पुस्तकालयों को दोबारा स्थापित किया और एक त्रुटि में आई जो मैंने पहले कभी नहीं देखी है। दुर्भाग्यवश, मेरे Google-fu कौशल इस त्रुटि के बराबर नहीं लग रहे हैं क्योंकि मैं मेरे लिए काम करने वाले किसी भी फिक्स को नहीं ढूंढ पा रहा हूं। Sidenote: इन कार्यक्रमों ने मेरी पुरानी स्थापना पर ठीक संकलित किया, और वे मेरे लैपटॉप पर पूरी तरह से ठीक संकलित करते हैं जो लिनक्स मिंट 17.2 भी चलाता है।glfw3 त्रुटि: कमांड लाइन

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

यही तो टर्मिनल बाहर थूक मुझ पर:

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

तो, अगर किसी को भी मुझे बता सकते हैं कि मैं क्यों हो रही है

यह संकलन बयान मैं संकलित करने के लिए उपयोग कर रहा है यह/या इसे कैसे ठीक किया जाए जो बिल्कुल अद्भुत होगा! किसी भी मदद के लिए समय से पहले धन्यवाद।

संपादित करें: मैंने कोशिश करने और इसे ठीक करने के लिए मिंट को दो बार पुनर्स्थापित कर दिया है। यह हर बार बदल जाता है।

संपादित करें 2: मैं चारों ओर झुका रहा हूं और अभी तक कोई समस्या नहीं मिली है।

उत्तर

11

ऐसा लगता है कि गायब प्रतीक libdl से है।

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

all: out 
clean: 
     rm -f out *.o 
.PHONY: all clean 

CXX = g++ 
CPPFLAGS = 
CXXFLAGS = -std=c++11 -Wall -Wextra -g 
LIBS = -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -pthread -lXi -ldl 
LDFLAGS = 

out: main.o 
     $(CXX) $(LDFLAGS) -o [email protected] $^ $(LIBS) 

हालांकि, अगर आप pkg-config का उपयोग करते हैं तो यह बहुत आसान होगा। मैं अपने सिर सही कमांड के शीर्ष (मैं लिनक्स पर अब नहीं कर रहा हूँ तो मैं जांच नहीं कर सकता) बंद पता नहीं है, लेकिन यह इस तरह दिखेगा:

packages = glfw3 
CPPFLAGS := $(shell pkg-config --cflags $(packages)) 
LIBS := $(shell pkg-config --libs $(packages)) 

इस तरह आप नहीं होगा आपको यह भी पता होना चाहिए कि आपको -ldl की आवश्यकता है, क्योंकि pkg-config आपके लिए यह पता लगाएगा। यह चीजों को करने का मानक तरीका है।

आउटपुट देखने के लिए pkg-config --libs glfw3 चलाने का प्रयास करें। यदि यह स्थापित नहीं है, तो sudo apt-get install pkg-config चलाएं।

+0

दाएं। दोस्त बहुत - बहुत धन्यवाद। मैं घर आने पर एक घंटे में कोशिश करूंगा। मैं एक मेकफ़ाइल का उपयोग करता हूं, मुझे बस एक ही समस्या मिल रही थी। उत्तर के लिए धन्यवाद, अगर यह काम करता है तो मैं इसे जवाब के रूप में चिह्नित करूंगा! – DavidBittner

+0

यह मेरे लिए काम किया। दोस्त बहुत - बहुत धन्यवाद! सबसे उपयोगी क्या था आपने कहा कि "libDL" मुझे कई अन्य उत्तरों के विपरीत ऑनलाइन मिला है। यह जानना एक वास्तविक मुक्ति था और न केवल "आपके जीसीसी कमांड लाइन में जोड़ने के लिए" महत्वपूर्ण था। – rsethc

+1

बहुत बहुत धन्यवाद, यह मेरे लिए भी काम करता है! – SRG

4

मैं सिर्फ इस तरह के अपने आप के रूप में कम अनुभवी प्रोग्रामर के लिए Dietrich Epp का जवाब आसान बनाने के लिए करना चाहते हैं:

इस समस्या को हल करने के लिए, जो भी आपके संकलक विधि के लिए आवश्यक का मतलब द्वारा libdl पुस्तकालय लिंक। जोड़ने आदेशों को "-ldl" जोड़ सकते हैं ताकि DavidBittner से मूल जोड़ने आदेश ऊपर हो जाता है:: कमांड लाइन (जीसीसी) का उपयोग करते हैं

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl 

नोट "-ldl" अंत में जोड़ा।

यदि आप सीएमके का उपयोग कर रहे हैं, तो अतिरिक्त libs की सूची में "-ldl" जोड़ें।

+0

बहुत बहुत धन्यवाद मेरे दोस्त! –

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! – SRG

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