2015-11-17 18 views
5

Gần đây tôi đã phải cài đặt lại Linux Mint trên máy tính của mình. Tôi cài đặt lại tất cả các thư viện của tôi, chẳng hạn như GLFW và đã gặp một lỗi mà tôi chưa bao giờ thấy trước đây. Rất tiếc, các kỹ năng google-fu của tôi dường như không ngang bằng với lỗi này vì tôi không thể tìm thấy bất kỳ bản sửa lỗi nào hoạt động cho tôi. Sidenote: các chương trình này được biên dịch tốt trên bản cài đặt cũ của tôi, và chúng cũng biên dịch hoàn toàn tốt trên máy tính xách tay của tôi cũng chạy Linux Mint 17.2.lỗi glfw3: DSO Thiếu từ dòng lệnh

Đây là báo cáo kết quả biên dịch tôi sử dụng để biên dịch:

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

Đây là những gì nhà ga spits ra nhìn tôi:

/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 

Vì vậy, nếu có ai có thể cho tôi biết tại sao tôi nhận được này/hoặc làm thế nào để sửa chữa nó sẽ là hoàn toàn tuyệt vời! Cảm ơn trước vì đã giúp đỡ.

EDIT: Tôi đã cài đặt lại Mint hai lần để thử và sửa lỗi này. Nó bật lên mọi lúc.

CHỈNH SỬA 2: Tôi đã không quan tâm và vẫn chưa tìm thấy sự cố.

Trả lời

11

Dường như biểu tượng bị thiếu là từ libdl.

Là phần thưởng gia tăng, tôi sẽ cung cấp cho bạn một Makefile. Hãy nhớ thụt lề với các tab, KHÔNG gian, nếu không Makefile sẽ không hoạt động.

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) 

Tuy nhiên, sẽ dễ dàng hơn nhiều nếu bạn sử dụng pkg-config. Tôi không biết trên đầu của tôi lệnh đúng (tôi không phải trên Linux bây giờ vì vậy tôi không thể kiểm tra), nhưng nó sẽ như thế này:

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

Bằng cách này bạn sẽ không thậm chí phải biết rằng bạn cần -ldl, vì pkg-config sẽ tìm ra cho bạn. Đây là cách làm tiêu chuẩn.

Thử chạy pkg-config --libs glfw3 để bạn xem kết quả. Nếu nó chưa được cài đặt, hãy chạy sudo apt-get install pkg-config.

+0

Phải. Cám ơn nhiều, ông bạn. Tôi sẽ thử điều này trong một giờ khi tôi về nhà. Tôi sử dụng một makefile, tôi chỉ nhận được cùng một vấn đề. Cảm ơn câu trả lời, tôi sẽ đánh dấu nó là câu trả lời nếu nó hoạt động! – DavidBittner

+0

Điều này làm việc cho tôi. Cám ơn nhiều, ông bạn! Điều gì hữu ích nhất là bạn đã nói "libDL" không giống như nhiều câu trả lời khác mà tôi đã tìm thấy trực tuyến. Biết nó là một lib thực sự và không chỉ "uh add -ldl vào dòng lệnh gcc của bạn" là rất quan trọng. – rsethc

+1

Cảm ơn rất nhiều, điều này cũng làm việc cho tôi! – SRG

4

Tôi chỉ muốn đơn giản hóa câu trả lời Dietrich EPP cho các lập trình viên ít kinh nghiệm như bản thân mình:

Để giải quyết vấn đề này, liên kết các thư viện libdl bởi bất cứ điều gì có nghĩa là theo yêu cầu của phương pháp biên dịch của bạn. Nếu sử dụng dòng lệnh (gcc): thêm "-ldl" để các lệnh liên kết để các liên kết lệnh gốc từ DavidBittner trên trở thành:

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

Lưu ý "-ldl" thêm vào cuối.

Nếu bạn đang sử dụng Cmake, hãy thêm "-ldl" vào danh sách các lib bổ sung.

+0

Cảm ơn rất nhiều bạn của tôi! –

+0

Cảm ơn rất nhiều sự giúp đỡ của bạn! – SRG

Các vấn đề liên quan