Как правильно связать объекты C ++, используя функции GLFW в Linux? - PullRequest
0 голосов
/ 02 июня 2018

Я создал очень простую программу, содержащую несколько файлов, и сейчас пытаюсь связать с ней библиотеку GLFW.Я только добавил функции GLFW в файл main.cpp и включил туда только библиотеку, и только компиляция и выполнение этого файла с помощью команды g++ main.cpp -lglfw идет нормально.

До того, как я добавил эту библиотеку, компиляция исвязывание всей программы также прошло нормально, но даже если в других файлах не используются функции GLFW, когда я хочу связать все вместе (g++ -Wall -g -std=c++11 -lglfw main.o hello_world.o console.o), я внезапно получаю сообщение об ошибке «неопределенная ссылка» на каждую функцию GLFW, которую я использовал.(Я не получил ошибку при компиляции main.cpp: g++ -Wall -g -std=c++11 -lglfw -c main.cpp)

Это файл main.cpp:

#include "basis.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
// Open-GL
#include <GLFW/glfw3.h>
/// Setup:
/// sudo apt-get update
/// sudo apt-get install libglfw3
/// sudo apt-get install libglfw3-dev
/// Compile:
/// g++ main.cpp -lglfw

using namespace std;

void errorCallback(int error, const char* description) {
    fprintf(stderr, "Error: %s\n", description);
}

void test() {
    GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL);
    if (!window) {
        cout << "Window creation failed!" << endl;
    }
    runConsole();
}

int main(int argc, char* argv[]) {
    glfwSetErrorCallback(errorCallback);
    if (!glfwInit()) {
        cout << "GLFW initialization failed!" << endl;
        exit(EXIT_FAILURE);
    }

    test();

    glfwTerminate();
    return 0;
}

Кроме того, я не знаю, где находится библиотекамоя машина.Кроме того, Linux-машина - это Virtual Box, а исходный код находится в общей папке, расположенной в моей системе Windows, но это никогда не создавало проблем с библиотеками до того, как я скомпилировал их в Linux.

1 Ответ

0 голосов
/ 02 июня 2018

Упс, перечитывая вопрос, я подумал о новом решении, и оно сработало :) Правильная команда компоновщика: g++ -Wall -g -std=c++11 main.o hello_world.o console.o -lglfw

...