Почему g ++ не может правильно найти библиотеку glfw3 в Ubuntu? - PullRequest
0 голосов
/ 30 сентября 2018

Я новичок в Ubuntu и до сих пор программирую на glfw3 в Mac.Проблема заключается в следующем.После того, как я загрузил пакет glfw3 с

sudo aptitude install libglfw3 libglfw3-dev

в Ubuntu, я проверил расположение библиотеки glfw3.Я гуглил онлайн и обнаружил, что dpkg --listfiles packagename возвращает путь ко всем файлам, связанным с пакетом, который я установил.Результат dpkg --listfiles libglfw3 таков.(Я просто покажу пути с файлами .so)

/usr/lib/x86_64-linux-gnu/libglfw.so.3.2
/usr/lib/x86_64-linux-gnu/libglfw.so.3

Результат dpkg --listfiles libglfw3-dev таков:

/usr/lib/x86_64-linux-gnu/libglfw.so

Существует 3 типа файлов .so, поэтомуЯ хотел использовать самый последний (3.2), и make-файл, использующий версию 3.2, очень хорошо работал на Mac.Вот make-файл, который я пытался использовать в Ubuntu

LINK_TARGET = Animation

OBJS = glad.o Animation.o

REBUILDABLES = $(OBJS) $(LINK_TARGET)

INCLUDES = -I/usr/include

all : $(LINK_TARGET)
    echo All successfully linked!

$(LINK_TARGET) : $(OBJS)
    g++ -o $@ $^ -L/usr/lib/x86_64-linux-gnu -ldl -lglfw.3.2

Animation.o : Animation.cpp
    g++ -c Animation.cpp $(INCLUDES)

glad.o : glad.c
    g++ -c glad.c $(INCLUDES)

clean :
    rm -f $(REBUILDABLES)
    echo Clean done!

Если мы сосредоточимся на строке

$(LINK_TARGET) : $(OBJS)
    g++ -o $@ $^ -L/usr/lib/x86_64-linux-gnu -ldl -lglfw.3.2

Опция -lglfw.3.2, которая так хорошо работала в Mac (Mac использовался длябыть файлами .dylib вместо файлов .so. Однако флаг -ldl также не нужен в Mac).Теперь он печатает сообщение об ошибке /usr/bin/ld: cannot find -lglfw3.2, если запускается make-файл.

Makefile успешно запускается, если я изменяю параметр -lglfw3.2 на -lglfw, и я не понимаю, почему.libglfw.so.3.2 и libglfw.so оба существуют в каталоге.Я хочу понять, почему это происходит.Заранее спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

Благодаря комментарию @ zxxc, ссылка -lglfw была символической ссылкой на libglfw.so.3.2 в конце концов.И его предположение правдоподобно, поскольку Mac имеет расширение (.dylib) в конце имени файла, а не в середине, как (.so) в Linux.

...