ホームページ  >  記事  >  バックエンド開発  >  Go で Linux 共有ライブラリとインターフェースするにはどうすればよいですか?

Go で Linux 共有ライブラリとインターフェースするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 00:38:02465ブラウズ

How to Interface with Linux Shared Libraries in Go?

Go での Linux 共有ライブラリとのインターフェース

Go を使用して共有オブジェクト (.so) ファイル内の関数にアクセスするには、次の手法を利用できます。

静的にリンクされたライブラリの Cgo

コンパイル時に共有ライブラリがわかっている場合は、cgo を使用できます。適切なリンカー フラグを指定し、特定の行をコメント アウトすることで、共有ライブラリから関数を直接呼び出すことができます。たとえば、libfoo.so から bar() を呼び出すには:

<code class="go">package example

// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"

func main() {
    C.bar()
}</code>

Cgo を使用した動的共有ライブラリのロード

または、cgo を使用して、実行時に共有オブジェクトを動的にロードすることもできます。これには、C ラッパー関数を使用して、ライブラリを開く (dlopen())、関数アドレスを取得する (dlsym())、ライブラリを閉じる (dlclose()) ためのロジックを実装することが含まれます。

カスタム C ラッパー

cgo の代わりに、共有ライブラリ関数に Go 互換のインターフェイスを提供するカスタム C ラッパーを作成できます。 Go の CGO API を介して関数をエクスポートする独自の C ライブラリを構築することで、共有ライブラリとの対話をより詳細に制御できるようになります。

Python ctypes 同等

Python の ctypes パッケージの機能を複製するには、 Go から C ライブラリにアクセスするための ctypes のようなインターフェイスを提供する mach-go ライブラリの使用を検討してください。このライブラリは、Linux を含むさまざまなプラットフォームをサポートし、共有オブジェクトをロードして使用する簡単な方法を提供します。

以上がGo で Linux 共有ライブラリとインターフェースするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。