ホームページ  >  記事  >  バックエンド開発  >  Go は外部ファイルから静的ライブラリを呼び出すことができますか?

Go は外部ファイルから静的ライブラリを呼び出すことができますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 16:27:02919ブラウズ

Can Go Invoke Static Libraries from External Files?

外部ファイルから 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 サイトの他の関連記事を参照してください。

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