Go から静的オブジェクト ファイル内の関数を呼び出す
Go 内の共有ライブラリ (.so) ファイルから関数を呼び出そうとします。この目的で syscall.LoadLibrary を使用するという提案があったかもしれませんが、その試みは「未定義: syscall.LoadLibrary」というエラーで失敗しました。
しかし、共有ライブラリをロードしてアクセスすることは確かに可能です。 Go の機能。 POSIX プラットフォームでこれを実現するには、cgo を利用してシステムのネイティブ API と対話できます。
cgo を使用した簡単なデモを次に示します。
<code class="go">// +build linux darwin // #cgo LDFLAGS: -ldl // #include <dlfcn.h> package main import ( "C" "fmt" ) func foo() { // Load the shared library handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY) // Retrieve the function pointer from the library bar := C.dlsym(handle, C.CString("bar")) // Print the function pointer address fmt.Printf("bar is at %p\n", bar) } func main() { foo() }</code>
この中で例:
正確な構文と関数名は、基礎となるシステムとコンパイラによって異なる場合があることに注意してください。 cgo を利用し、ネイティブ システム API と対話することで、Go と共有ライブラリ間のギャップを埋め、アプリケーションの機能を拡張できます。
以上がGo から静的オブジェクト ファイル内の関数を呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。