2016-11-04 62 views
0

我的一般問題是:在C應用程序中將其他語言的庫包含在內的最常見方法是什麼?例如,如果我有一個用於執行函數X的Ruby庫和一個用於執行函數Y的Python庫,我該如何用C語言編寫一個程序(語言是這樣的),它使用每個函數中的函數?在C應用程序中包含其他語言的庫

我見過可以訪問這些高級語言的C庫的包裝器,但是有其他方式的包裝器嗎?一般來說,處理這個問題有一個共同的方法嗎?

回答

1

這些本地代碼庫(即它們是否已被編譯?)還是這些源代碼庫(即包含Ruby源代碼的一堆文本文件)?

如果前者,使用Ruby或Lua等語言的庫通常具有已發佈的二進制接口(「ABI」)。這是低級別的文檔,描述了它們的庫及其函數如何在底層工作。通常,這些是用C或C++定義的,或者是用於實現Ruby本身的解釋器/編譯器的任何語言。

因此,您必須找到該文檔,並找出如何調用您感興趣的部分。有些語言甚至使用與C相同的ABI,您只需創建一個與庫的內容,你可以直接調用它(這就是你如何集成例如彙編器和C,甚至C++,你可以直接生成C函數)。

如果是後者,通常需要找到一種可嵌入的語言版本,並找出如何從應用程序內部運行腳本(例如,這是通常使用Lua的方式)。

但你確定你需要給定的Ruby庫嗎?通常情況下,通用庫是在底層使用C或C++庫實現的,然後僅包裝腳本語言,因此您可以跳過腳本翻譯層並自己使用(也許稍微低一點的)庫。

PS - 還有像SWIG這樣的自動包裝生成器,它將以一種語言讀取文件併爲您編寫翻譯代碼。

相關問題