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

Linda Hamilton
リリース: 2024-10-28 00:38:02
オリジナル
465 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!