簡體   English   中英

在C應用程序中包含第三方庫

[英]Including third-party libraries in C applications

在使用C語言進行應用程序開發時,我有點天真。我一直在為正在使用的編程語言編寫很多代碼,並且希望包括ICU中的內容(用於國際化和unicode支持)。

問題是,我不確定是否包含第三方庫的任何約定。 對於諸如readline之類的東西,其中可能已經安裝了很多系統,可以安全地鏈接到它(我認為)。 但是,如果我想在自己的代碼中包含該庫的版本,該怎么辦? 這是普遍現象還是我在想這一切錯嗎?

如果您的代碼需要第三方庫,則在構建之前需要檢查它們。 在Linux上(至少在開源環境下),典型的做法是使用Autotools編寫一個配置腳本,該腳本查找庫的存在以及如何使用它們。 值得慶幸的是,這是非常自動化的,並且有大量示例。 基本上,您編寫了configure.ac (和/或Makefile.am ),它們分別是autoconfautomake的源文件。 它們被轉換為configureMakefile.in./configure有條件地使用您指定的任何配置時間選項來構建Makefile。

請注意,這實際上僅適用於Linux。 我猜想在Windows上規范的方法是使用IDE的項目文件...

如果它是.lib且沒有運行時鏈接庫,則它將被編譯為您的代碼。 如果需要鏈接到動態庫,則必須確保它們在其中提供安裝程序,或將用戶指向可以獲取它們的位置。

如果您正在談論將軟件交付給最終用戶並擔心依賴關系-您必須向他們提供正確的程序包/安裝程序,其中包括運行軟件所需的依賴關系,否則,請確保用戶可以獲取它們(取決於本地)法律,出口法律等,等等,但這僅與許可有關)。

您可以構建軟件並在ICU和其他任何使用中靜態鏈接,也可以交付軟件和ICU共享庫。

這取決於您要定位的操作系統。 對於Linux和Unix系統,通常會看到動態鏈接,因此應用程序將使用系統上已安裝的庫。 如果執行此操作,則意味着如果用戶還沒有該庫,則取決於用戶。 如果以發行版的軟件包格式打包應用程序,Linux中的軟件包管理器將為您完成此任務。

在Windows上,您通常會看到靜態鏈接,這意味着應用程序將庫捆綁在一起,它將使用該特定版本。 許多不同的應用程序可能使用相同的庫,但包含其自己的版本。 因此,您可以在系統上浮動許多庫的副本。

隨代碼一起提供庫副本的問題在於,您無法免費獲得庫維護人員的錯誤修復。 模糊,小型且不受支持的庫通常值得靜態鏈接。 否則,我只是添加依賴項,並確保您附帶的任何軟件包都正確地指出了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM