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

Barbara Streisand
リリース: 2024-11-02 16:27:02
オリジナル
986 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート