2014-03-12 26 views
3

我在OS X 10.9.2(Mavericks)上編寫了一段C代碼,並使用終端的gcc編譯器通過鏈接所需的庫進行編譯(如-lm -lfftw3等)。它在我的電腦上運行正常,另一個運行相同的操作系統(也有所需的庫),但是當我嘗試在運行OS X 10.8(Mountain Lion)的另一臺計算機上運行可執行文件時,它不起作用。我沒有嘗試在運行OS X 10.8(Mountain Lion)的計算機上重新編譯,因爲它沒有安裝所需的庫。如何在我的電腦上使用唯一的終端創建一個新的可執行文件(運行OS X 10.9.2(Mavericks)),以便它可以在任何以前版本的操作系統上運行,可能永遠都不會安裝所需的庫?從終端使用gcc編譯一個C程序,用於較舊的OS X版本

謝謝。

+1

鏈路它靜態,所以任何外部庫成爲必要的部分二進制。 –

+0

你必須確保這些庫在另一臺計算機上 - 從你的問題我會說這是問題不是OSX版本 – Mark

+0

@Marc B:你能給我一個例子,說明我可以怎麼做(鏈接靜態的是)?謝謝 – Rahul

回答

1

有三種方法解決這個問題:

  • 靜態所有依賴鏈接到你的二進制文件。
    • 這將包括最終應用程序庫中的副本,使其更大,但是獨立。
  • 創建依賴關係的動態構建並將它們部署到目標系統上。
    • libm(數學庫)通常存在於所有系統中,所以它就像libfftw3和其他需要重建的庫。
    • 這可以通過構建源,或安裝需要的庫使用的MacPorts來實現<www.macports.org>
  • 提供用於遠程側的替代環境中運行中(即,應用程序:一個虛擬機運行其內部小牛)。

編輯:

在回答您的ocmment,您可以強制依賴靜態鏈接爲您的Xcode的目標,在libfftw3的情況下,通過更換行:

-lfftw3 

With:

-l/full/path/to/libfftw3.a 

對目標鏈接的所有庫重複此操作,然後設置。最終的應用程序二進制文件的文件大小可能會更大,但完全獨立。

參考文獻:圖書館的


  1. 力靜態鏈接鏈接到Xcode目標?,所訪問2014-03-14,<https://stackoverflow.com/questions/458805/force-static-linking-of-library-linked-to-xcode-target>
  2. 編譯爲先前的OS X版一個C程序,訪問的2014-03-14,<https://stackoverflow.com/questions/22391848/compiling-a-c-program-for-previous-os-x-version>
+0

您可否請我指出一個鏈接,指出我可能能夠在最終的應用程序中包含這些庫的副本?我的目標是在我的計算機上創建一個可執行文件(或者多個可執行文件,如果需要的話),這些文件可以在運行舊版Mac OS的其他計算機上運行,​​並且沒有libfftw3和libaiff(另外兩個庫我正在使用)已安裝。謝謝。 – Rahul

+0

你是如何構建你的應用程序的?嚴格來自命令行還是makefile(如果是這樣,GNU make,AutoMake,CMake),還是IDE(Eclipse,XCode等)? – DevNull

+0

請查看我發佈的這個替代問題。我有你在那裏尋找的答案。 http://stackoverflow.com/questions/22391848/compiling-a-c-program-for-previous-os-x-version – Rahul

相關問題