2011-04-16 49 views
2

我正在使用DevIL编写一个C++ OpenGL项目,并且在尝试解决如何加载图像以用作纹理时遇到编译时错误。Devil和C++中的OpenGL

到目前为止,我有这个

//Declarations 
const char* filename = "back.bmp"; 
ILboolean ilLoadImage(const char *filename); 

ILuint image; 
ilGenImages(1, &image); 
ilBindImage(image); 

//Load the image 
if (!ilLoadImage(filename)) 
{ 
throw runtime_error("Unable to load image" +filename); 
} 

呈现我的错误:error C2110: '+' : cannot add two pointers

如果我改变的filename的声明string filename = "back.bmp";和if语句

if (!ilLoadImage(const_cast<char*>(filename.c_str()))) 

我得到这个链接错误error LNK1104: cannot open file 'DevIL.libkernel32.lib'

我确定我已将所有的DevIL文件放在需要的位置,并在Project-> Properties-> Linker-> Input-> Additional Dependencies中添加依赖项。

回答

2

确保您可以通过在附加依赖把一个空间,在库之间添加C++字符串C字符串

throw runtime_error(std::string("Unable to load image") +filename); 

修复链接错误修复编译错误。

此外,如果您必须使用const_cast,则可能是您做错了。

ILboolean ilLoadImage(const char *filename); 

你并不需要强制转换为char *为了通过.c_str() - .c_str()返回const char *

+0

链接错误一直持续。我在Microsoft SDKs \ Windows \ 7.0A \ Lib和config.h,config.h.in,devil_cpp_wrapper.h,devil_internal_exports.h,il.h,ilu.h中添加了DevIL.lib,ILU.lib和ILUT.lib ,ilu_region.h,ilut.h和ilut_config.h放在与上面相同的目录中,而不是\ Lib,位于\ Include \ IL中。我的#包括:,。我错过了什么,或做错了什么? – OddCore 2011-04-16 14:05:05

+0

您应该将您的“其他库目录”设置为您的lib文件的位置,并将以空格分隔的库添加到“其他依赖项”。如果您向SDK dir添加任何内容,那么您做错了。 – Erik 2011-04-16 14:09:40

+0

我做到了。问题仍然存在。显然,它适用于所有的DevIL库,不仅仅是DevIL.lib,还有ilut.lib和ilu.lib,因为我试图在“附加依赖”中改变它们的顺序,它总是最后一个找不到。正如你所说,我也改变了“附加库文件”,尽管在过去当我将OpenGL库放入SDK文件夹,然后没有将它们添加到“附加库文件”时,它并没有抱怨。 – OddCore 2011-04-16 14:35:20