sqlite cgo 交叉编译linux发布 报错问题

用到了github.com/mattn/go-sqlite3的包,windows运行的好好的
打包发布linux ,设置了环境变量:

set GOARCH=amd64
set GOOS=linux

结果拿到wsl一跑,报错:


panic: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub

go-sqlite用到了cgo加上

set CGO_ENABLED=1

编译报错:


gcc_linux_amd64.c: In function '_cgo_sys_thread_start':
gcc_linux_amd64.c:61:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?

  sigset_t ign, oset;

一番查找资料,下载安装了linux的gcc,尝试加了环境变量

rem set CC=E:\apps\gcc-7.5.0\bin\arm-linux-gnueabihf-gcc
rem set CXX=E:\apps\gcc-7.5.0\bin\arm-linux-gnueabihf-g++

报错提示


cgo: exec E:\apps\gcc-7.5.0\bin\arm-linux-gnueabihf-gcc: exec: "E:\\apps\\gcc-7.5.0\\bin\\arm-linux-gnueabihf-gcc": file does not exist

怎么会找不到了。估计是windows系统无法使用linux上的。

索性在wsl上再搭建了一套node和go的开发环境
脚本基本变化不大:

VERSION=0.0.1
GOPATH=/mnt/d/dev-me/go/momotodo
GOARCH=amd64
GOOS=linux
cd src/momotodoweb
yarn build
mv ./dist/index.html ./dist/momotodo.html
cd $GOPATH
cd src
GO111MODULE=on
go build -o ../pro/momotodo-$VERSION
cd $GOPATH

需要注意的是,无论是npm还是go,都需要重新下载依赖。

我在用vite时直接报错了,删除了之前windows上下载的node_modules,重新install,才运行起来。

go 也是一样。

go env -w GOPROXY=https://goproxy.cn,direct

更新七牛的代理,之后重新build下载了依赖。

一段代码用的embed file,路径时\结果报找不到。
改成了/找到了。

安装gcc,这个里边还包括g++、make,很全:

sudo apt install build-essential

啥吉儿错都没报,顺利编译完成。启动,日志一切顺利。所以所谓的跨平台编译。emm,还是算了吧。

Original: https://blog.csdn.net/le_17_4_6/article/details/119332592
Author: 衡与墨
Title: sqlite cgo 交叉编译linux发布 报错问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816343/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球