我正在使用C ++和Opengl,我正在尝试使用SOIL,但是当我编译时,我得到了对glBindTexture,glTexImage2D等的未定义引用。但是,这只是来自SOIL.c,而不是我自己的源代码。这就是错误产生的结果:
我的显卡是NVIDIA GeForce GTX 680,我的驱动程序已全面更新。我已将所有内容链接起来,并且我正在使用预制来管理我的项目。我正在开发一台Linux机器,但是,我正在尝试将它交叉编译到我的Windows机器上,这会产生这个错误。如果我在linux上编译它,那就完全没问题了。这是我的premake4.lua文件:
我的包含文件是:
#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及其包含文件,但它只是不起作用。
答案 0 :(得分:1)
链接g ++的订单事宜。 试试这个订单:
links {“SOIL”,“glfw3”,“opengl32”,“gdi32”,“glu32”}
(编辑:根据Premake论坛中的重复问题修复OP答案:http://industriousone.com/topic/how-use-premake-compile-static-library)
答案 1 :(得分:0)
查看SOIL主页,他们说必须静态链接。因此,不要使用动态链接(在gcc编译器中使用'-l'),而是尝试指定库的完整路径。
这篇文章说明了我想说的话:https://stackoverflow.com/a/4156190/2293156
gcc -lsome_dynamic_lib some_static_lib.a code.c