1. 程式人生 > 其它 >【CGO】C原始碼編譯為動態庫供go程式呼叫(linux環境、arm架構執行平臺)

【CGO】C原始碼編譯為動態庫供go程式呼叫(linux環境、arm架構執行平臺)

動態庫編譯

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下