2014-02-27 102 views
0

我試圖編譯STD下面CIMG示例代碼=的C++ 0x和MinGW:編譯CIMG用的C++ 0x和MinGW

#include "CImg.h" 

using namespace cimg_library; 

int main() { 
    CImg<unsigned char> img(640,400,1,3); 
    img.fill(0); 
    unsigned char purple[] = { 255,0,255 }; 
    img.draw_text(100,100,"Hello World",purple); 
    img.display("My first CImg code"); 
    return 0; 
} 

當我編譯使用:

g++ -std=c++0x HelloWorld.cpp -lgdi32 

我得到以下錯誤:

error: '_fileno' was not declared in this scope 

但是,當我編譯不STD = C++ 0x中,它完美的作品:

g++ HelloWorld.cpp -lgdi32 

如何編譯啓用C++ 0x的CImg?

+0

你使用哪個版本的GCC? –

+0

Peter我正在使用GCC 4.5.2 –

回答

2

我認爲gnu++0xgnu++11應可在GCC 4.5.x之下,與你應該能夠編譯CImg有可能使用C++ 11(我只是我自己的MinGW的安裝目錄下籤,但是我使用4.8,你能否考慮升級?)。所以,你可以簡單地使用:

g++ -o hello_world.exe HelloWorld.cpp -O2 -lgdi32 -std=gnu++0x 

或者:

g++ -o hello_world.exe HelloWorld.cpp -O2 -lgdi32 -std=gnu++11 

編輯

我只是檢查和-std=gnu++11選項是因爲GCC 4.7可用,但我相信你應該罰款與-std=gnu++0x在4.5.x下。

+0

感謝Peter。我測試了std = gnu ++ 0x,它工作。但即使我谷歌它,我仍然無法理解gnu ++ 0x和C++ 0x之間的區別。你能解釋一下這個區別嗎? –

+1

@JaimeIvanCervantes當然。通過引用[GCC](http://gcc.gnu.org/projects/cxx0x.html):「要啓用C++ 0x支持,請將命令行參數-std = C++ 0x添加到您的g ++命令或者,除了C++ 0x擴展外,還要啓用GNU擴展,在你的g ++命令行中加上-std = gnu ++ 0x。「所以,基本上這意味着它是C++ 11的一些GNU擴展。更多信息可以在這裏找到:http://stackoverflow.com/questions/10613126/what-are-the-differences-between-std-c11-and-std-gnu11 –