假設我在C++中有一個巨大的庫(有大量的依賴關係,它需要大約3小時才能完成GCC下的構建)。我想建立在這個lib上,但不希望在C++中這樣做,而是以更高效的語言。我怎麼才能橋接或包裝該extern lib軟件包,以便我可以在另一種語言和程序上訪問它呢?自動換行巨大的C庫爲C導入Swift/Go
語言考慮:
- 斯威夫特
- 轉到
是我發現的是,這兩種語言確實提供自動橋接或包裝對於C庫和代碼(我真的不知道什麼是包裝/橋接之間的區別)。所以,如果我有一些C代碼,我可以把它放在同一個Swift或Go項目中,並可以在我的項目中使用它進行簡單的導入。
但是,這對於C++代碼在兩種語言中都不起作用。所以我googled如何將C++庫轉換爲C代碼或生成autowrappers。我發現:
- swig.org - 對C++庫
- 科莫C++編譯器自動包裝 - 自動將C++到C代碼
- LLVM - 應該能夠採取任何輸入並將其轉換到任何輸出LLVM能夠。
問:
- 它甚至在該領域可用/逼真/可管理使用自動包裝上像雨燕/轉到其他語言如此巨大的LIB之上構建 ,如果 或自動橋接?
- 3個列出的庫/程序/框架在C++ - > C的過程中效果最好(因爲Swift和Go都提供C自動 包裝)。
- 到目前爲止,還有更好的替代方案嗎?
- 如果使用其他工具來完成包裝/橋接過程,只用「堅持使用C++」會比使用更高效的語言 更像Swift/Go嗎?
謝謝:)
免責聲明:還有手工包裹在C C++的lib的可能性但會採取工作難以承受量如此巨大的庫。
除非這個圖書館是基於語言互操作性而設計的,否則這可能是一個巨大的,如果不是不可能的事情。主要挑戰將是對象生命週期管理(與宿主語言GC兼容)並將每個參數轉化爲一些簡單的C表示形式。當然,圖書館很可能是巨大的,但是它的API很小,在這種情況下你很幸運。 – marangisto
SWIG功能非常強大,可以包裝相當複雜的系統,當然能夠與大型圖書館合作。它不會自動完成它,你需要調整和調整你的SWIG * .i文件,但是SWIG是解決這種問題的可靠方法,因爲它給你提供了定義原始語言如何被包裝和暴露的方法到新的調用語言。 – stderr
你可能感興趣[cgogen](https://cgogen.com/) –