2011-04-16 57 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