私はC++で巨大なlibを持っているとしましょう(多数の依存関係があり、GCCの完全ビルドで約3時間必要です)。私はそのライブラリを構築したいが、C++ではなく、より生産的な言語でそうしたいと思っている。 extern libパッケージを実際にブリッジするかラップすると、他の言語やプログラムでアクセスすることができますか?考えSwift/GoでのインポートのためのCへの巨大なC++ライブラリの自動添付
言語:
- スウィフト
- ゴー
何私が見つけたことは(私は実際に知らない両方の言語がCのLIBSとコードの自動ブリッジングまたはラッピングを提供しないということであり、ラッピング/ブリッジの違いは何ですか?)だから、私はいくつかのCコードを持っている場合、私はちょうど同じSwiftやGoプロジェクトでそれを投げることができ、私のプロジェクトで簡単なインポートでそれを使用することができます。
しかし、これは両方の言語でC++コードでは機能しません。だから私はどのようにCのコードにC + +のlibsを変換するか、またはautowrappersを生成するつもりだった。私は、次のが見つかりました: - C++のlibs
- swig.org自動的にCコードにC++を転送し
- LLVM - に任意の入力を取得し、それを変換することができるはずです〜任意の出力LLVMが可能です。
質問:自動折り返しを使用して
- はそれも 場合、スウィフト/ゴーのような他の言語でのこのような巨大なLIBの上に を構築する/使用可能な現実的/管理しやすいの王国ですか自動ブリッジ?
- 3つのリストされたlibs/programs/frameworkは、C++ - > Cの処理に最適です(SwiftとGoの両方がCの自動 ラッピングを提供するため)。
- 私は今まで考えていたものよりも優れた選択肢がありますか?
- "C++に固執する"方が良いでしょうか?他のツールを使ってラッピング/ブリッジ処理を行うのは、はるかに多いでしょうか? Swift/Goのように生産性の高い言語を使う利点がありますか?
感謝:)
免責事項:あり手動でCでのC++のlibをラップする可能性もあるが、それはこのような巨大なLIBのために仕事の耐え難い量を取るだろう。
ライブラリが言語相互運用性を考慮して設計されていない限り、これは、不可能ではないにしても、大きな可能性があります。主な課題は、オブジェクトのライフタイム管理(ホスト言語GCとの互換性)であり、すべての議論を単純なC表現に変えることです。もちろん、ライブラリは巨大ですが、APIが小さく、運が良ければ可能です。 – marangisto
SWIGは非常に強力で、かなり複雑なシステムをラップすることができ、確かに大きなライブラリで作業することができます。それは自動的にはできません。SWIG * .iファイルを調整して調整する必要がありますが、SWIGは元の言語がどのようにラップされて公開されるかを定義する方法を提供するので、このような問題に対処するための強固な方法です新しい呼び出し言語に – stderr
[cgogen](https://cgogen.com/)に興味があるかもしれません。 –