GO言語が自分で生成したsoダイナミックライブラリファイルを呼び出す方法

2184 ワード

一、soダイナミックライブラリを呼び出す.
1、soダイナミックライブラリファイルの生成;
まず書くcソースファイルと.hヘッダファイル;gccコンパイルツールを用いるコンパイル生成.soファイルgcc-shared source.c -o libname.soまたはgcc-shared-fPIC source.c -o libname.so-fPICの具体的な意味は調べる必要があります;【注意】私は使用中、soダイナミックファイルの明らかに注意しなければならない.ファイル名は必ずlibの先頭、libxxxである.so、#cgo LDFLAGS:-L./-lxxxのように、後でインポートするときにlibを追加する必要はありません.
2、go言語はどのように呼び出すか.
go言語はC言語のダイナミックライブラリを呼び出したい場合、cgoを通じて、具体的な使い方は以下の通りです.
package main
/*
#cgo CFLAGS: -I
#cgo LDFLAGS: -L -l
#include "header_file"
*/
import "C"
    
func main(){
	C.function()
}

3、使用前に経路LD_を変更するLIBRARY_PATH
linuxシステムの下でダイナミックライブラリは共有ライブラリとも呼ばれ、自分で生成したsoファイルも第三者ライブラリに依存する必要がある可能性があります.変更量はシステムに必要な共有ライブラリがどこで見つけられるかを教えます.LD_がなければLIBRARY_PATH、プログラムが見つからないので、変数LD_を表示できます.LIBRARY_PATHの値がない場合は、手動で追加する必要があります:export LD_LIBRARY_PATH=:$(LD_LIBRARY_PATH)
4、demo
C言語ソース関数:
//happy.c
#include
void sayhi(){
	printf("hello, world!
"); printf("bye-bye!
"); } int add(int a, int b){ printf("%d+%d=%d", a, b, a+b); return a+b; }

ヘッダファイル
//happy.h
void sayhi();
int add(int, int);

soファイルを生成するには:
gcc -shared happy.c -o libhappy.so

go言語の主関数
//main.go
package main
/*
#cgo CFLAGS: -I./
#cgo LDFLAGS: -L./ -lhappy
#include "happy.h"
*/
import "C"
import "fmt"

func main(){
a:=C.add(3, 4)
fmt.Println(a)
C.sayhi()
}

CFLLAGSでコンパイルオプションを設定し、LDFLAGSで指定したディレクトリの動的ライブラリをリンクします.import「C」は注釈に隣接しており、空行はありません.
export LD_LIBRARY_PATH = ./:$LD_LIBRARY_PATH

go run main.go

**
二、直接c言語を呼び出す.
**
//main.go
package main
/*
#include "happy.c"
*/
import "C"
import "fmt"

func main(){
a:=C.add(3, 4)
fmt.Println(a)
C.sayhi()
}

三、go言語のグローバル変数
グローバル変数の役割ドメインはパケット全体であり、ローカル変数の役割ドメインは対応するカッコ内{}のみである.グローバル変数はvarを使用して定義する必要があります.使用中はできるだけ使用を避けます.=は、役割ドメインで使用されるためです.=は、グローバル変数ではなくローカル変数を生成します.原則は近接の原則である