2015-11-17 2 views
5

Мне недавно пришлось переустановить Монетный двор Linux на моем ПК. Я переустановил все мои библиотеки, такие как GLFW, и наткнулся на ошибку, которую я никогда раньше не видел. К сожалению, мои навыки google-fu, похоже, не соответствуют этой ошибке, поскольку я не смог найти никаких исправлений, которые работают для меня. Sidenote: эти программы скомпилированы на моей старой установке, и они также отлично компилируются на моем ноутбуке, который также работает с Linux Mint 17.2.Ошибка glfw3: DSO Отсутствует из командной строки

Это заявление компиляции я использую для компиляции:

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 

Так что, если кто-нибудь может сказать мне, почему я получаю это/или как исправить это, что было бы потрясающе! Спасибо заранее за любую помощь.

EDIT: Я заново установил монетный двор дважды, чтобы исправить это. Он появляется каждый раз.

РЕДАКТИРОВАТЬ 2: Я занимаюсь спортом и все еще должен найти проблему.

ответ

11

Похоже, что отсутствующий символ от libdl.

В качестве дополнительного бонуса я собираюсь предоставить вам Makefile. Не забудьте отступы с вкладками, а не пробелами, иначе Makefile не будет работать.

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. Я не знаю, с верхней части моей головы правой команды (я не на Linux в настоящее время, так что я не могу проверить), но это будет выглядеть следующим образом:

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

Справа. Большое спасибо человеку. Я попробую это через час, когда я вернусь домой. Я использую make-файл, я просто получаю ту же проблему. Спасибо за ответ, я буду отмечать его как ответ, если он работает! – DavidBittner

+0

Это сработало для меня. Большое спасибо, мужик! Что было наиболее полезно, вы сказали «libDL» в отличие от многих других ответов, которые я нашел в Интернете. Знать, что это был фактический lib, а не просто «uh add -ldl в вашей командной строке gcc», было крайне важно. – rsethc

+1

Большое спасибо, это сработало и для меня! – SRG

4

Я просто хочу, чтобы упростить ответ Dietrich ЕНП для менее опытных программистов, таких как про себя:

Чтобы решить эту проблему, связать библиотеку libdl любыми средствами требует вашего метода компилятор. При использовании командной строки (ССАГПЗ): добавить «-ldl» для зацепления команд так, что исходное соединение команда из DavidBittner выше становится:

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

Обратите внимание на «-ldl» добавляется к концу.

Если вы используете Cmake, добавьте «-ldl» в список дополнительных библиотек.

+0

Большое спасибо моему другу! –

+0

Большое спасибо за вашу помощь! – SRG