【问题标题】:OpenGL SOIL Undefined reference to glBindTexture, glTexImage2d, etcOpenGL SOIL 未定义对 glBindTexture、glTexImage2d 等的引用
【发布时间】:2013-08-14 17:47:49
【问题描述】:

我正在使用 C++ 和 Opengl,并且我正在尝试使用 SOIL,但是当我编译时,我得到了对 glBindTexture、glTexImage2D 等的未定义引用。但是,这仅来自 SOIL.c,而不是我自己的源代码。这就是错误产生的原因:

http://pastebin.com/sKrQaBhz

我的显卡是 NVIDIA GeForce GTX 680,我的驱动程序已全面更新。我将所有内容都链接在一起,并且正在使用 premake 来管理我的项目。我正在linux机器上开发,但是,我试图将它交叉编译到我的windows机器上,这会产生这个错误。如果我在linux上编译它,那完全没问题。这是我的 premake4.lua 文件:

http://pastebin.com/T4hsbdz0

我的包含文件是这样的:

#include "opengl/gl_core_3_3.hpp"
#include <GLFW/glfw3.h>
#include <SOIL/SOIL.h>
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include "loadshader.hpp"

我正在使用 mingw32 来编译我的代码。在我使用 SOIL 之前,一切都很好。我从他们位于 lonesock.net 的网页上下载了 SOIL,然后将其复制到 libSOIL.a 及其包含文件中,但它不起作用。

【问题讨论】:

  • 也许尝试编译 .a 文件而不是复制它?

标签: c++ opengl reference undefined soil


【解决方案1】:

链接顺序对 g++ 很重要。 试试这个顺序:

链接{“SOIL”、“glfw3”、“opengl32”、“gdi32”、“glu32”}

(编辑:根据 Premake 论坛中的重复问题修复了 OP 答案:http://industriousone.com/topic/how-use-premake-compile-static-library

【讨论】:

    【解决方案2】:

    看 SOIL 主页,他们说它必须是静态链接的。因此,不要使用动态链接(gcc 编译器中的“-l”),而是尝试指定库的完整路径。

    这篇文章说明了我想说的话:https://stackoverflow.com/a/4156190/2293156

    gcc -lsome_dynamic_lib some_static_lib.a code.c

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 2011-05-12
      • 2014-05-24
      • 2017-09-12
      • 2014-11-11
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多