hi3516


原文链接: hi3516

海思论坛 - Powered by Discuz!
Hi3516A开发--烧写/启动模式 - 不积跬步,无以至千里 - CSDN博客
Hi3516A开发--烧写/启动模式
一、启动模式
Hi3516A 支持以下三种启动方式:
从片外 NAND Flash 存储空间启动
从片外 SPI Flash 存储空间启动
从 BOOT ROM 存储空间启动
当芯片上电复位时,启动模式由 BOOTROM_SEL/BOOT_SEL 信号的值决定

###
使用Go语言做了一个微服务,微服务中的一个功能,需要调用底层so。该微服务运行于arm64架构,系统为aarch64 GNU/Linux。因此需要交叉编译。

      第一步:编写编译脚本,脚本中需要设置环境变量:

      export CGO_ENABLED=1 
      export GOARCH=arm64
      export GOOS=linux 
      rm -rf appserver

      go build -v

      第二步:调整gcc编译环境。如下图中5项,默认用于编译和链接的工具。位于/usr/bin目录中,先做好备份,删除掉。然后使用"ln -s /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc gcc"命令依次制作交叉编译环境工具的链接。最后运行脚本,交叉编译完成。拷贝到目标机器上,成功运行。

跨平台编译

然后执行 CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 CC=arm-himix200-linux-gcc CGO_LDFLAGS="-static" go build即可生成二进制文件

安装gcc-mingw-w64
sudo apt install gcc-mingw-w64

生产64位可以执行文件

env CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -o main.exe main.go

生产32位可执行文件

env CGO_ENABLED=1 GOOS=windows GOARCH=386 CC=i686-w64-mingw32-gcc go build -o main.exe main.go

GO=go
DCLXVI_DIR=dclxvi-20130329
# Cross-compilers. On Ubuntu, these can be obtained using:
# apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
AR_ARM=/usr/bin/arm-linux-gnueabihf-ar
CC_ARM=/usr/bin/arm-linux-gnueabihf-gcc
CPP_ARM=/usr/bin/arm-linux-gnueabihf-g++
# AR_386=$(AR)
# CC_386="$(CC) -m32"
# CPP_386="$(CPP) -m32"

all: test

.PHONY: libdclxvi
# Targets to build a cross-compiled binary that can be used to run the tests and
# benchmarks on a different architecture.
test:
	USE_C=true $(MAKE) AR=$(AR_ARM) CC=$(CC_ARM) CPP=$(CPP_ARM) -C $(DCLXVI_DIR) libdclxvi.a
	CGO_ENABLED=1 GOARCH=arm CC=$(CC_ARM) CXX=$(CPP_ARM) $(GO) test -c -o bn256.test.arm

记录在macOS上编译Windows和Linux的go程序,带CGO调用C代码,比如go-sqlite3包,已测试通过。

参考链接:

https://www.cnblogs.com/ibgo/p/6489488.html

http://www.mingw-w64.org/doku.php/download/macports

https://github.com/mattn/go-sqlite3/issues/532

https://github.com/mattn/go-sqlite3/issues/372#issuecomment-396863368

https://blog.filippo.io/easy-windows-and-linux-cross-compilers-for-macos/

  1. Windows平台(mingw-w64)

安装编译器:brew install mingw-w64

编译指令:CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -v

  1. Linux平台(x86_64-linux-musl-gcc)

安装编译器:brew install FiloSottile/musl-cross/musl-cross

编译指令:CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CGO_LDFLAGS="-static" go build -a -v

注:

-a:重新编译

-static表示静态连接,没有这个选项,linux上运行报:-bash: ./xxx: /lib/ld-musl-x86_64.so.1: bad ELF interpreter: No such file or directory
————————————————
版权声明:本文为CSDN博主「henly1217」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/henly1217/article/details/102551251

`