【CGO】C原始碼編譯為動態庫供go程式呼叫(linux環境、arm架構執行平臺)
阿新 • • 發佈:2021-12-31
動態庫編譯
1.安裝並配置交叉編譯工具鏈
網上有詳細教程
2.go env環境配置
go env -w CGO_ENABLED=1
go env -w GOOS=linux
go env -w GOARCH=arm
go env -w CC=...-gcc
go env -w CXX=...-gcc
CC和CXX配置成自己的編譯工具的gcc和g++
也可以不配置,在go build前作為引數即可,例如:
CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=/.../arm-linux-gnueabihf-gcc CXX=/.../arm-linux-gnueabihf-g++ go build -o test test.go;*
3.將.c編譯成共享庫.so
/.../arm-linux-gnueabihf-gcc -c -fPIC -o mylib.o myc.c;/.../arm-linux-gnueabihf-gcc -shared -o lib485.so mylib.o;rm mylib.o
GO程式呼叫
package test
/*
#cgo CFLAGS: -I/... //此路徑為c標頭檔案所在路徑
#cgo LDFLAGS: -L/.../lib -lmyc //此路徑需加入到/etc/ld.so.conf檔案末尾
#include "myc.h"
*/
import "C"
注意:
1、所處位置一定要是檔案開頭package下面,註釋和impo "C"中間不可空行
2、適用執行環境是arm架構的硬體平臺,編譯成可執行程式之後需要把依賴的動態庫燒進arm板子檔案系統中/lib下