Go からの外部関数の呼び出し: .so オブジェクト ファイルの探索
.so オブジェクトに格納されている C ベースの関数を統合することは可能ですかGo コード内のファイル?この疑問は Go 開発者の間で好奇心を引き起こしましたが、明確な解決策を見つけるのは難しい場合があります。
一般的に提案されるアプローチの 1 つは、「syscall.LoadLibrary」関数の利用を含みますが、この試みは多くの場合、未定義の関数エラーにつながります。 Godocs でさらに調査すると、「syscall」パッケージに「LoadLibrary」関数が欠如していることが明らかになります。
では、Go プログラマーは引き続き外部ライブラリの関数を利用できるのでしょうか?絶対に! POSIX プラットフォームは、CGO と「dlopen」などの関数を組み合わせて使用する有望なソリューションを提供します。このアプローチを説明するために例を詳しく見てみましょう。
<code class="go">// #cgo LDFLAGS: -ldl // #include <dlfcn.h> import "C" import fmt func foo() { handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY) bar := C.dlsym(handle, C.CString("bar")) fmt.Printf("bar is at %p\n", bar) }</code>
「CGO」を採用し、必要な C 関数を定義することにより、外部ライブラリを動的にロードし、Go コード内でその関数にシームレスにアクセスできます。これにより、既存の C ベースの機能を Go アプリケーションに統合できる可能性が広がり、開発の新たな可能性が開かれます。
以上がGo プログラマは外部ライブラリの関数を利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。