以下是使用 Go 語言打包成 .so
庫并使用 C 語言調用的完整步驟:
1. Go 語言打包成 .so
庫
(1)編寫 Go 代碼
創建一個 Go 文件(如 calculator.go
),并定義需要導出的函數。導出的函數名必須以大寫字母開頭,并在函數前添加 //export
注釋。
package mainimport "C"
import "fmt"//export Add
func Add(a, b int) int {return a + b
}func main() {}
(2)編譯生成 .so
庫
在終端中進入項目目錄,運行以下命令:
go build -buildmode=c-shared -o libcalculator.so calculator.go
這將生成 libcalculator.so
文件,即打包好的動態鏈接庫。
2. 使用 C 語言調用 .so
庫
(1)編寫 C 代碼
創建一個 C 文件(如 main.c
),并包含生成的頭文件(calculator.h
),調用導出的函數。
#include "calculator.h"int main() {int result = Add(10, 20);printf("Result: %d\n", result);return 0;
}
(2)編譯和運行
在終端中運行以下命令:
gcc -o main main.c libcalculator.so
./main
運行結果應為:
Result: 30
注意事項
- 頭文件:生成的
.so
庫會附帶一個對應的頭文件(如calculator.h
),C 代碼需要包含這個頭文件。 - 路徑問題:確保
.so
庫文件的路徑正確,或者將其路徑添加到系統的LD_LIBRARY_PATH
環境變量。 - 數據類型:Go 和 C 的數據類型需要匹配,例如 Go 的
int
對應 C 的int
。
通過以上步驟,你可以將 Go 語言的功能封裝為 .so
庫,并在 C 語言中調用這些功能。