Goで動的ライブラリまたは静的ライブラリを生成する方法

リリース: 2019-11-28 15:21:52
転載
4970 人が閲覧しました

Goで動的ライブラリまたは静的ライブラリを生成する方法

#予備知識


  • プラグイン モード

  • プラグイン実行モード

  • ##go プラグイン パッケージの使用
  • 関連知識 (推奨:
go 言語チュートリアル

)go build あなたbuildmode を指定できます。複数のモードに分かれています。具体的なモードは以下の通りです。

モード現在の Go バージョンarchivec-archivec-shareddefaultexeplugin
説明
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 サイトの他の関連記事を参照してください。

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