最近要使用另外一條執行緒來擷取影像,然後處理完以後拋回給 UI 執行緒畫出來。想說只有簡單的迴圈控制,使用 atomic 的布林就能夠處理掉這個問題,沒有必要使用 mutex。可是在程式當中引入
#include <atomic>
卻發現編譯不會過。跳出了下面這段訊息
fatal error: 'atomic' file not found
連 header 都錯是哪招?而且這個問題在 .pro 當中(我在使用 Qt)加入了
QMAKE_CXXFLAGS += -std=c++11
指定使用 C++11 標準⋯⋯也沒用。
後來重新爬了網路的文以後,在使用 Xcode 的那一派人身上也有出現過相似的問題,因此初步猜測是 libc++ 沒有被正確的指派到(或用錯個?)在 .pro 當中再補上
macx { QMAKE_CXXFLAGS += -stdlib=libc++ QMAKE_LFLAGS += -stdlib=libc++ }
居然這樣就正常編譯過了⋯⋯
總結一下,共做了三個修改才正確的讓系統找到 atomic 的標頭檔:
- 編譯時多加 -std=c++11,讓編譯器以 C++11 的標準來編譯。
- 編譯時再加 -stdlib=libc++,強制加入 libc++ 函式庫,讓系統搜得到 atomic。
- 在連結的時候,同時也要把 libc++ 連上來,所以還在 LFLAGS 加入 -stdlib=libc++
至於塞在 macx 當中,是為了指定只有 OSX 的平台編譯時需要多這一行,怕在意外間讓其他平台編譯的時候多了不需要的旗標們。不過這還有待驗證 @___@