0

我正在使用 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 及其包含文件中,但它不起作用。

4

2 回答 2

1

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

链接{“土壤”、“glfw3”、“opengl32”、“gdi32”、“glu32”}

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

于 2013-08-15T02:14:54.320 回答
0

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

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

gcc -lsome_dynamic_lib some_static_lib.a code.c

于 2013-08-14T17:58:27.897 回答