C ++,Linker问题返回未定义的引用

时间:2016-10-24 05:46:43

标签: c++ reference linker

这可能是重复的,但我所看到的问题的所有答案都没有充分回答我的问题,所以我仍然在发帖。

我的代码是这样的。非常基本的。复制并粘贴其他网站。

#include <GL/glew.h> // include GLEW and new version of GL on Windows
#include <GLFW/glfw3.h> // GLFW helper library
#include <stdio.h>

int main() {
  // start GL context and O/S window using the GLFW helper library
  if (!glfwInit()) {
    fprintf(stderr, "ERROR: could not start GLFW3\n");
    return 1;
  }

  // uncomment these lines if on Apple OS X
  /*glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);*/

  GLFWwindow* window = glfwCreateWindow(640, 480, "Hello Triangle", NULL, NULL);
  if (!window) {
    fprintf(stderr, "ERROR: could not open window with GLFW3\n");
    glfwTerminate();
    return 1;
  }
  glfwMakeContextCurrent(window);

  // start GLEW extension handler
  glewExperimental = GL_TRUE;
  glewInit();

  // get version info
  const GLubyte* renderer = glGetString(GL_RENDERER); // get renderer string
  const GLubyte* version = glGetString(GL_VERSION); // version as a string
  printf("Renderer: %s\n", renderer);
  printf("OpenGL version supported %s\n", version);

  // tell GL to only draw onto a pixel if the shape is closer to the viewer
  glEnable(GL_DEPTH_TEST); // enable depth-testing
  glDepthFunc(GL_LESS); // depth-testing interprets a smaller value as "closer"

  /* OTHER STUFF GOES HERE NEXT */

  // close GL context and any other GLFW resources
  glfwTerminate();
  return 0;
}

我使用了CodeBlocks。在&#34;包括&#34;文件夹我有这些文件的目录(GL / GLFW)。正如您所看到的,它们在代码的顶部是#included。

然而,这会返回一个很长的列表&#34;未定义的引用&#34;错误。我见过人们提到链接器并提供了一系列代码而没有解释它的位置。我不知道链接器是什么,或者更确切地说,我不知道我必须提出什么代码或将它放在哪里才能使其工作。

非常感谢明确的解释和实际帮助。

1 个答案:

答案 0 :(得分:0)

将C ++源代码转换为可执行程序的过程包括多个步骤:

  • 预处理
  • 汇编
  • 组装
  • 链接

但是,通常你只需运行g ++然后运行不同的程序,每个程序执行一步。这就是为什么你可以指定例如在g ++的命令行中链接器的参数,它们将简单地在链接器上传递。

因此,对于您的问题:您需要链接包含您要使用的符号(函数,方法等)的库。哪些库及其所在位置不同,无需查看错误消息即可。但是,由于您包含了GL标题,因此您很可能需要链接类似libgl ...

的内容

链接器参数是-L,用于指定库所在的位置(= directory),以及要链接的库的-l。 &#39; lib&#39;在库名中以及库文件后缀(.so,.a)可以省略,例如, -lpthread链接库libpthread.so。