[英]Using homebrew, gcc and llvm with C++ 11
這是我的問題:我想使用gcc或clang提供的C ++ 11功能。 但是,我有這些要求:
Homebrew似乎只想使用gcc(如果我錯了,請糾正我)。 我找不到任何切換到LLVM的選項。 雖然我知道這可能是因為並非所有庫都與LLVM兼容,但這仍然是一個很好的功能。
預裝在gcc mac上的gcc版本是4.2。 gcc 4.2沒有所需的c ++ 11功能。 我已經通過自制程序安裝了4.7,但是搜索如何設置自制程序以使用它都說不要這樣做(mac上的gcc 4.2不是vanilla版本,所以我得到的4.7版本將無法編譯一些事情)。
我的問題是:有沒有人有任何建議或修復他們已經實現解決這個問題? 我應該放棄Homebrew嗎? 有誰知道Homebrew是否有計划在未來轉向LLVM? 有沒有人有如何處理這些不兼容性的升級計划?
從長遠來看,我看不出自制軟件是如何繼續依賴gcc 4.2的,但是沒有找到關於此問題的真正討論。
Mac上的默認GCC不是GNU的真正GCC。 它實際上是LLVM-GCC,它是GCC的一個分支。 幾年前,LLVM-GCC被終止,取而代之的是DragonEgg ,這是一個使用LLVM作為GCC后端的GCC插件。
LLVM-GCC只是一個編譯器前端,其作用是使用GCC前端將源代碼轉換為LLVM IR [ LLVM 11.3 簡介 ]。 生成IR后,LLVM后端將使用它生成二進制代碼。 這一步與GCC無關。
上述目標完全取自10.7,其組件全部由clang編譯,這是LLVM提供的前端。
但Apple仍然保留了LLVM-GCC和GCC運行時庫。 我想它的目的可能是提供一個編譯一些代碼GCC的機會。
現在讓我們回答你的問題:
clang++ -stc=c++11 -stdlib=libc++
。 clang可能已經支持所有c ++ 11功能 。 --with-c++11
參數來使用clang來編譯boost.But你不能在brew install autoconf
時使用這個參數。 實際上,clang可能無法正確編譯某些組件。 $HOMEBREW_ROOT/Library/Formula
目錄下破解相應的ruby腳本。 幸運的是,在大多數情況下,用./configure blablabla
替換./configure blablabla
./configure blablabla CXX=clang++ -stc=c++11 -stdlib=libc++
運行良好。 順便說一句,如果您的黑客成功,請向自制程序提出拉取請求。 所以,試試吧,玩得開心。
我有一個OS X Mountain Lion環境並使用C ++ 11。 在這個答案中,我將打破你不編譯自己的東西的要求。
我使用Homebrew,我必須說,我建議你放棄依賴它來為你提供clang和libc ++以及用它們構建的所有公式。
我所做的和我喜歡的是
/opt/local
並將/opt/local/bin
放在/etc/paths
頂部。 我已經按照clang構建說明將它安裝到/opt/local
。
對於libc ++,一個細節:在運行buildit
腳本之后,我將include目錄buildit
鏈接到/opt/local/lib/c++/v1
( /opt/local
上的clang將其視為默認目錄),並對符號進行符號鏈接到/opt/local/lib/
(但看看二進制文件不會自動鏈接到/opt/local/lib
上的libc ++。你必須使用install_name_tool )。
使用
clang++ -std=c++11 -stdlib=libc++
你也可以從homebrew-dups安裝最新的gcc
brew install [flags] https://raw.github.com/Homebrew/homebrew-dupes/master/gcc.rb
對於LLVM, brew install --HEAD llvm
。 要使用clang或brew安裝的gcc,請添加--with-clang
或--with-gcc=gcc-xx
,其中xx是您想要的版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.