2010-12-14 90 views
1

對於C中的應用程序開發,我有點天真。我一直在爲我正在編寫的編程語言編寫大量代碼,並且我想包括東西來自ICU(用於國際化和unicode支持)。在C應用程序中包含第三方庫

問題是,我只是不確定是否有包含第三方庫的任何約定。對於readline等很多系統可能已經安裝的內容來說,鏈接到它是安全的(我認爲)。但是如果我想在自己的代碼中包含該庫的一個版本呢?這是常見的還是我想這全都是錯的?

+0

您可以靜態鏈接它。 – Falmarri 2010-12-14 20:40:05

回答

2

如果您的代碼需要第三方庫,您需要在構建之前檢查它們。在Linux上,至少在開源的情況下,使用Autotools編寫一個配置腳本來查找庫的存在以及如何使用它們。謝天謝地,這是相當自動的,並且有很多例子。基本上你寫了configure.ac(和/或Makefile.am),它們分別是autoconfautomake的源文件。它們被轉換爲configureMakefile.in,並且./configure有條件地使用您指定的任何配置時間選項構建Makefile。

請注意,這隻適用於Linux。我想在Windows上執行它的規範方法是使用IDE的項目文件...

1

如果它是一個.lib文件而且它沒有運行時鏈接庫,它會被編譯進你的代碼中。如果您需要鏈接到動態庫,您必須確保他們在那裏提供安裝程序或將用戶指向可以獲取它們的位置。

1

如果您正在討論將軟件運送給最終用戶並擔心依賴性 - 您必須向他們提供正確的軟件包/安裝程序,其中包含運行軟件所需的依賴關係,或者確保用戶能夠獲得它們(根據當地法律,出口法律等等,但這都是關於許可的)。

您可以建立您的軟件並在ICU中靜態鏈接以及您使用的任何其他軟件,或者您可以運送您的軟件和ICU共享庫。

1

這取決於您定位的操作系統。對於Linux和Unix系統,您通常會看到動態鏈接,因此應用程序將使用系統中已安裝的庫。如果你這樣做,這意味着如果用戶沒有它,取決於用戶是否需要獲取該庫。如果您將應用程序打包爲發行版的軟件包格式,則Linux中的軟件包管理器將爲您執行此操作。

在Windows上,您通常會看到靜態鏈接,這意味着應用程序會捆綁庫並使用該特定版本。許多不同的應用程序可能會使用相同的庫,但包含它們自己的版本所以你可以在你的系統上有許多庫的副本。

1

將代碼庫的副本與代碼一起發送的問題是,您沒有得到庫的維護者的好處錯誤修復是免費的。模糊的,小的,不受支持的庫通常值得靜態鏈接。否則,我只需添加依賴關係,並確保您發佈的任何包都適當地指明瞭它。

+0

問題通常是什麼構成晦澀,小而不支持的分歧。像Debian和Ubuntu這樣的強大軟件包管理系統的用戶,如果有人維護包的發行版,即使基本上沒有維護上游或可移植性差,也可能會考慮大量標準庫和「受支持」或「維護」上游並且難以安裝。如果你在這樣的庫上引入了依賴關係,那些比較模糊或DIY類型的系統的用戶肯定會討厭它...... – 2010-12-14 22:01:37

+0

@R:好點。作爲一名Debian用戶很好,我的BSD boxen通常不需要運行花哨的東西,但是他們確實稱之爲依賴性地獄。 – nmichaels 2010-12-14 22:14:28

相關問題