2012-11-14 195 views
2

通常對於我的OS X版本,我一直在運行10.6的舊版Mac Book Pro上編譯我的應用程序。這確保我支持這個版本的OS X.編譯爲OS X 10.6?

但是由於各種原因,MBP不再是一個長期的選擇,所以我一直在編譯運行10.8的更新的設備。但是,當我這樣做時,即使設置了-mmacosx-version-min = 10.6標誌,我的應用程序也不能在10.6上運行。我設置標誌時發生的錯誤是libSystem.B.dynlib中的「Symbol not found:_wcsdup」

我查了一下這個錯誤,我能找到的唯一建議是直接鏈接到10.6 SDK。但是,當我試圖將10.6 SDK從MPB複製到新機器(因爲10.6上沒有安裝10.6 SDK)時,它無法編譯錯誤,如「error:bits/C++ config.h:No such file or directory 「我認爲這是因爲我」安裝「SDK的方式,儘管其他人已經取得了成功。

有沒有人有解決方案?

+0

你是否正在用'-std = C++ 11'編譯?如果是這樣,這將不會在10.6下工作,因爲它不包含庫文件;你需要使用'-std = gnu ++ 11'來處理10.6到10.8。 – trojanfoe

+0

是的,事實上,我是,這很有趣,我將不得不嘗試用該標誌進行編譯,看看它是否成功。 – latreides

+0

如果您使用過任何C++ 11,您可能需要對代碼進行一些更改。有些可以用'tr1 ::'類代替,但是,當然不是全部。 – trojanfoe

回答

0

在VM中運行10.6,如​​VMWare或VirtualBox。

+0

這需要安裝光盤或dmg 10.6或可能存儲一個恢復分區,我都沒有。 – latreides

+0

此外,除非其服務器版本使得獲得合法副本更加困難,否則您不能(合法地)在虛擬機中運行OS X。 – latreides

0

我能夠重新安裝舊版SDK和編譯器與此程序:How can we restore ppc/ppc64 as well as full 10.4/10.5 SDK support to Xcode 4?

你需要改變的Xcode的安裝腳本路徑。

此外,您可能無法在定位10.6時使用-std = C++ 11,因爲您大多還需要-stdlib = libC++,它僅在定位到10.7或更高版本時纔可用。

自10.7以來,Apple僅分發libC++二進制文件。您可以構建自己的libC++,並將其與您的應用程序一起部署到10.6臺機器。但是,當目標低於10.7時,蘋果硬編碼編譯器禁止-stdlib = libC++。