これはばかげた質問のように思えるかもしれませんが、C++ などの他の言語から呼び出すことができるライブラリを GO で作成することは可能ですか?
質問する
147 次
2 に答える
6
残念ながら、それは直接 ( 「呼び出すことができます」 ) 可能ではありません。プラットフォームの C 実装によって定義されているものに関して、いくつかの問題があります (公式にサポートされているプラットフォームのほとんど/すべてに対して):
- 呼び出し規約は同じではありません: たとえば、Go 関数/メソッドは、戻り値 (存在する場合) にレジスタを使用しません。
- 実行モデルが異なります: 分割スタックが使用されます。
- ガベージ コレクターは、プロセスによって所有されているが、GC によって「収集不可」または特別にマークされた (正確な収集のために) として「登録」されていないメモリによって混乱する可能性があります。
- Go ランタイムの初期化が問題です。プロセスの他の何よりも先に行われることを期待しています。複数の Go .so とリンクする場合、初期化を調整するための既製のメカニズムは存在しません。
上記のすべてが「gc」に適用されます。同じことが「gccgo」である程度緩和されています。これについての詳細はC C_Interoperabilityにあります。
于 2013-07-17T11:00:27.763 に答える