)go build あなたbuildmode を指定できます。複数のモードに分かれています。具体的なモードは以下の通りです。
説明 | |
---|---|
1.10.3 | |
バイナリ ファイルにコンパイルします。通常、これは静的ライブラリ ファイルです。 xx.a | |
は C アーカイブ ファイルにコンパイルされます。 C 呼び出し可能な静的ライブラリ。 xx.a.このようなファイルにコンパイルするには、C をインポートする必要があり、外部から呼び出す関数を「//export 関数名」を使用して関数の上にコメントする必要があることに注意してください。それ以外の場合、関数はデフォルトではエクスポートされません。 | |
C 共有ライブラリにコンパイルします。また、メイン パッケージで実行可能ファイルに直接コンパイルするために、関数の上に「C」をインポートし、 // エクスポート xxx | |
とコメントする必要があります。メイン パッケージがない場合は、.a ファイルにコンパイルします。 | |
ウィンドウ実行可能プログラムにコンパイルします。 | |
メイン パッケージと依存パッケージを go プラグインにコンパイルします。メイン以外のパッケージは無視されます。 [C ライクな共有ライブラリまたは静的ライブラリ。プラグイン開発用途】 |
インスタンス
结构: -softplugin //根目录 -soft //软件目录 -plugins //插件目录 -itf //接口目录
カスタム データなし
// plugins/hello.go package main import "fmt" func Hello(){ fmt.Println("hello") } // go build -buildmode=plugin -o hello.so hello.go // soft/basetype.go package main import ( "os" "path" "plugin" "fmt" ) func main(){ //加载插件 pluginDir := "../plugins" //扫描文件夹下所有so文件 f, err := os.OpenFile(pluginDir, os.O_RDONLY, 0666) if err != nil { panic(err) } fi, err := f.Readdir(-1) if err != nil { panic(err) } plugins := make([]os.FileInfo, 0) for _, ff := range fi { if ff.IsDir() || path.Ext(ff.Name()) != ".so" { continue } plugins = append(plugins, ff) pdll, err := plugin.Open(pluginDir + "/" + ff.Name()) if err != nil { fmt.Println(err) continue } plg, err := pdll.Lookup("Hello") if err != nil { panic(err) } plg.(func())() } } // go run basetype.go
プラグインを定義するインターフェースインターフェース。
rree以上がGoで動的ライブラリまたは静的ライブラリを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。