外部ファイルから Go で静的ライブラリを呼び出す
Go 内から静的オブジェクト (.so) ファイルを呼び出す可能性は疑問視されています。特に syscall.LoadLibrary() 関数の使用に関して。ただし、syscall パッケージを介してこの関数への参照を取得することは失敗したままです。
実際、POSIX プラットフォームでは、開発者が C コードを操作できるようにする解決策は cgo にあります。 dlopen 関数と補完関数には cgo を通じてアクセスでき、ライブラリのロードとその関数の呼び出しが可能になります。
たとえば、次の Go コード スニペットは、libfoo という名前のライブラリから bar という名前の関数を呼び出す方法を示しています。 .so:
<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 が Go と C の間の接続をブリッジし、外部共有ライブラリの関数を利用できるようにする方法を例示しています。
以上がGo は外部ファイルから静的ライブラリを呼び出すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。