2011-09-22 29 views
-2

假設您有一個用C語言寫成的軟件,例如XYZ。軟件XYZ是一個開源專有軟件。 所以我可以有軟件的來源。我可以使用該軟件,但我無法修改XYZ的文件。如何在我的項目中調用其他開源項目的函數C

假設我寫自己的軟件說ABC。該軟件使用XYZ提供的一些功能。

現在XYZ的源代碼中有函數說「static int get_val(int index)」。 我想使用函數get_val(),那麼我該怎麼做?

我該如何調用函數?

+0

描述同一個項目的「開源」和「專有」是矛盾的。一個項目要麼永遠都不是! – pmg

+0

確保方法get_val由XYS導出。在這種情況下,您將ABC與XYZ接口。 – Sorantis

回答

0

從XYZ構建共享庫(DLL或.so)。有可能有一個共享庫已經可用。 將您的代碼(即ABC)與XYZ鏈接起來,您可以開始使用程序中由XYZ公開的功能。 所有開源軟件都附帶非常好的自述文件和說明,可幫助您使用該軟件。從這些指南開始檢查。

2

你不應該。靜態關鍵字使函數在本地的翻譯單元(源文件,或多或少),這意味着它不能從其他翻譯單元調用。

那當然你可以,但它可能不是一個好主意。通過移除static關鍵字並將其添加到API頭文件

  1. 出口從模塊:

    有使可用的功能有兩種方式。這當然會涉及改變原始來源。

  2. #將該文件包含到您自己的源文件中,從而有效地使其成爲您自己的翻譯單元的一部分。根據此文件可能具有的其他依賴關係,這可能是也可能不是可行的選項。我會非常小心這樣做,但它是一個選項。
0

如果XYZ項目是開源

  • XYZ項目的源文件添加到您自己和編譯一起
  • 如果更改XYZ項目中的東西,考慮發送消息給項目的維護人員:他們可能會喜歡你所做的並將其納入未來版本

如果項目是專有的,那麼您沒有源代碼。定義爲static ...的函數在其他翻譯單元中不可見,因此您根本不會調用它。

相關問題