2010-02-17 55 views
4

我是libhistory的新手,所以我一直在尋找使用readline庫找到的示例。編譯它在命令提示符下使用:-isysroot或SDKROOT問題

gcc -o ./a.out /usr/local/share/readline/histexamp.c -lreadline -L/usr/local/lib/
它編譯和維護歷史記錄。

然後使用相同的文件創建一個xcode項目並鏈接到它編譯好的readline庫。但是當我運行時,它不會在枚舉歷史記錄時保持歷史記錄和崩潰。經過一些試驗後,我發現-isysroot參數是造成這個問題的原因:

-isysroot /Developer/SDKs/MacOSX10.6.sdk
gcc手冊頁說isysroot就像--sysroot選項,但只適用於頭文件。

爲什麼同一個程序的行爲與此選項有所不同?

+0

另請參見[SDKROOT,-isysroot和-syslibroot(http://lists.apple.com/archives/ xcode-users/2005/Dec/msg00524.html)。 – jww 2015-01-22 05:01:57

回答

4

-isysroot用於定義您使用的SDK。如果您使用10.6 SDK構建,然後嘗試在OS X 10.5上運行,那麼您可能會失敗。您應該使用與您的程序所需的最低操作系統相對應的SDK進行構建(以實現最大的向後兼容性)。

4

-isysroot /Developer/SDKs/MacOSX10.6.sdk 的SYSROOT將覆蓋系統目錄/ usr /本地等

在我看來,它是通過使用Xcode中SDK路徑問題的辦法。 如果要在用戶鏈接-L/usr/local/lib/

中搜索,將會產生一個不存在的路徑,如 /Developer/SDKs/MacOSX10.6.sdk/usr/local/lib/

我不認爲這是一個好主意,在所有的改變SYSROOT只是爲了使用SDK