2013-06-04 61 views
1

我有一個項目,我一直在工作一段時間,總是在調試。 今天我試着建立一個版本,並且它沒有編譯出一些非常奇怪的錯誤。 而調試編譯沒有任何警告,發佈拋出:GCC C++ 11調試版本,發佈失敗

/usr/include/c++/4.7/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 

兩個CMake的構建有C++ 11啓用:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=gnu++11 -Wall -g") 
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall") 

如何追蹤是什麼原因造成版本編譯錯誤?

編輯我使用的是Cmake 2.8,並試圖用gcc-4.6.3和4.7.2編譯,兩者都有相同的問題。

編輯#2使用-std = C++ 0x而不是C++ 11時問題仍然存在。

編輯#3降級到g ++ 4.6並沒有太大的幫助。錯誤現在只是改爲:

/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:etc... 

編輯#4我已刪除<thread>最先引起的問題。然後是<mutex><atomic>。現在它是使用std::shared_ptr<Blah>的任何一段代碼。 在我看來,如果Release不想用C++ 11進行編譯。這是故意的嗎?

回答

2

我敢打賭,這個問題來源於此行:

set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall") 

瞧,你設置變量CMAKE_CSS_FLAGS_RELEASE。有可能你只是想設置變量CMAKE_CXX_FLAGS_RELEASE。這將解釋爲什麼您的C++ 11在發佈模式下未啓用。

1

我已經通過簡單地移除CXX_FLAG,並使用CMake的的添加定義固定的問題:

add_definitions("-std=gnu++11") 

我不知道爲什麼,這使得它的工作,爲什麼調試工作,但釋放沒有,但它造成了很大的變化。