golang 嵌入式ARM7(交叉编译)

开发板信息

编译环境

安装go环境
sudo apt-get install golang

安装交叉编译工具链
sudo apt-get install gcc-arm-linux-gnueabihf

go version
arm-linux-gnueabihf-gcc -v

 

编译脚本 (build.sh)

#!/bin/bash  

# 设置交叉编译环境变量  
export GOARCH=arm  
export GOARM=7  
export GOOS=linux  
export CGO_ENABLED=1   # 启用CGO(如果不使用CGO可以不设置)

# 指定交叉编译使用的C编译器  
export CC=arm-linux-gnueabihf-gcc  

# 构建目标文件
go build -o cgotest -tags netgo -ldflags '-w -extldflags "-static"'

# 输出构建完成的消息  
echo "Build completed. Output file: cgotest"

 

生成一个不依赖于动态库的静态可执行文件。确保使用 -tags netgo 来避免使用 cgo,这是因为 cgo 可能会导致动态链接(取决于你代码中的 C 依赖)。

 

检查编译完的程序

 

将编译完的程序放到板子上运行

 

测试例子

a.c


// a.c  
#include "a.h"  

int sum(int a, int b) {  
    return a + b;  
}

a.h

// a.h  
#ifndef A_H  
#define A_H  

int sum(int a, int b);  

#endif // A_H

main.go

package main

import (
    "fmt"
)

/*
#cgo CFLAGS: -I.
#include "a.h"
*/
import "C"

// Sum is a function that calls the C sum function
func Sum(a int, b int) int {
    return int(C.sum(C.int(a), C.int(b)))
}

func main() {
    a := 3
    b := 4
    result := Sum(a, b)
    fmt.Printf("The sum of %d and %d is %d\n", a, b, result)
}

 

posted @ 2024-11-23 09:16  CHHC  阅读(34)  评论(0编辑  收藏  举报