Невозможно связать библиотеку GLFW с заголовочным файлом в Ubuntu 18.04 - PullRequest
0 голосов
/ 28 октября 2018

Я установил пакет libglfw3-dev: amd64 в Ubuntu с использованием стандартного sudo apt get и т. Д. Моя следующая строка компиляции:

g++ -o output -IL/usr/lib/x86_64-linux-gnu -lglfw driver.o 

Мой текущий файл c ++:

#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;
     if (!glfwInit())
        return -1;


}

Я пытался использовать локальные библиотеки glfw и устанавливать местоположения -I и -L, но ничего не помогло.Я убедился, что файлы .so и .h находятся в соответствующих местах, но я всегда получаю эту ошибку при запуске make:

g++ -o output -I/usr/include/GLFW -L/usr/lib/x86_64-linux-gnu -lglfw 

driver.o
driver.o: In function `main':
driver.cpp:(.text+0x5): undefined reference to `glfwInit'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'output' failed
make: *** [output] Error 1

Я пытался просмотреть все другие сообщения SO, и они рекомендуюткомпилируя с тоннами дополнительных флагов, но единственное, что я смог извлечь из них, это то, что что-то не так с моей библиотекой, поскольку VScode обнаруживает файлы .h.Как я могу скомпилировать это без каких-либо ошибок?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вы пытались поменять аргументы компоновщика?То есть скомпилируйте с помощью

g++ -o output driver.o -lglfw

. Компоновщик просматривает файлы слева направо и должен знать, какие символы из библиотек вам нужны, прежде чем библиотеки будут обработаны.

0 голосов
/ 28 октября 2018

Все прекрасно объяснено в руководстве https://www.glfw.org/docs/latest/build_guide.html#build_link_pkgconfig

Ключевая проблема заключается в ваших -I/usr/include/GLFW и #include <GLFW/glfw3.h>, которые в сумме дают путь /usr/include/GLFW/GLFW/glfw3.h.Я полагаю, что это неправильный путь к glfw3.h.компиляция прошла успешно из-за системного пути по умолчанию include -I/usr/include.

Не настраивайте флаги компилятора вручную, пусть pkg-config сделает это за вас.

Типичная командная строка компиляции и компоновкипри использовании статической версии библиотеки GLFW может выглядеть так:

 g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --static --libs glfw3`

Если вы используете общую версию библиотеки GLFW, просто опустите флаг --static.

 g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --libs glfw3`
...