簡體   English   中英

使用自制軟件,gcc和llvm與C ++ 11

[英]Using homebrew, gcc and llvm with C++ 11

這是我的問題:我想使用gcc或clang提供的C ++ 11功能。 但是,我有這些要求:

  1. 我正在使用mac
  2. 我依賴於自制軟件提供的一堆庫( 實際上我不想自己編譯)。 特別是OSG,它本身依賴於大量其他庫。 並提升,雖然我總能自己編譯。

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的機會。

現在讓我們回答你的問題:

  • 如果要使用C ++ 11功能,請使用clang++ -stc=c++11 -stdlib=libc++ clang可能已經支持所有c ++ 11功能
  • 如果你想讓自制軟件支持LLVM,它已經支持,至少在后端支持。
  • 如果你想使用clang作為編譯器前端的自制軟件,它取決於自制社區日程安排。 例如,你可以附加--with-c++11參數來使用clang來編譯boost.But你不能在brew install autoconf時使用這個參數。 實際上,clang可能無法正確編譯某些組件。
  • 如果你知道它可以由clang編譯但是homebrew還不支持,你必須在$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 ++以及用它們構建的所有公式。

我所做的和我喜歡的是

  • 從存儲庫克隆llvm,clang和libc ++。
  • 安裝到/opt/local並將/opt/local/bin放在/etc/paths頂部。
  • 用我的新鏗鏘語構建我的開發資料。
  • 讓Homebrew安裝像git這樣的工具和我不會開發的東西,只需使用。

我已經按照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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM