2013-02-24 79 views
3

我很不熟悉任何語言的靜態鏈接,但我試圖靜態鏈接一個Haskell程序在其他mac上使用。我已經成功地靜態地在Linux上的鏈接並確認其在其他Linux系統通過使用這些選項可以工作:-O2 -static -optl-static -optl-pthread是否可以在OS X上靜態鏈接一個Haskell應用程序?

當我嘗試使用在OS X上的選項,我得到以下錯誤:

ld: library not found for -lcrt0.o 
collect2: ld returned 1 exit status 

任何想法是什麼?我在做什麼完全堅果?

+3

有什麼特定的東西讓你認爲你需要靜態鏈接,只是爲了在不同的計算機上運行你的可執行文件?通常,OS X可執行文件動態鏈接到系統提供的庫;靜態鏈接遠不如Linux。你可以在你的可執行文件上運行'otool -Lv'來查看它動態加載的庫。如果它們都在'/ usr/lib'或'/ System/Frameworks'中,並且它們不是你安裝的東西,那麼你可能已經OK了。 – 2013-02-24 07:25:35

+0

我不知道。看起來它所鏈接的所有庫都位於/ usr/lib中。優秀。我想我應該保持這個狀態,因爲它可能仍然是一個有效的問題,但我會更新這個問題。 – Rayne 2013-02-24 07:32:48

+3

我應該說「它從未做過」,而不是「不那麼常​​見」。 [更多背景在這個答案](http://stackoverflow.com/questions/844819/how-to-static-link-on-os-x)和[Apple QA 1118](https://developer.apple。 COM /庫/ MAC /#QA/qa2001/qa1118.html)。 – 2013-02-24 07:45:55

回答

1

社區維基答案爲後代,從註釋導出:

通常OS X可執行動態對系統提供的庫鏈接;靜態鏈接遠不如Linux。您可以在您的可執行文件上運行otool -Lv以查看它動態加載的庫。如果他們都在/usr/lib/System/Frameworks而且他們不是你安裝的東西,那麼你可能已經OK了。

實際上,根據this answer,mac系統庫的靜態鏈接是不允許的。

相關問題