如何在Linux中使用GLFW函数正确链接C ++对象?

时间:2018-06-02 20:30:58

标签: c++ linux linker-errors glfw undefined-reference

我创建了一个包含多个文件的非常简单的程序,我现在正试图将GLFW库链接到它。我只在文件main.cpp中添加了GLFW函数,并且只在那里包含了库,只使用命令g++ main.cpp -lglfw编译和执行该文件就可以了。

在我添加这个库之前,编译和链接整个程序也很顺利,但即使我想将所有内容链接在一起(g++ -Wall -g -std=c++11 -lglfw main.o hello_world.o console.o),其他文件中也没有使用GLFW函数,我突然得到了错误'未定义引用'我使用的每个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 :(得分:1)

糟糕,在重新阅读我想到的新解决方案的问题时,它起作用了:)正确的链接器命令是:g++ -Wall -g -std=c++11 main.o hello_world.o console.o -lglfw