如何解决从 Windows 10 到 raspberry pi CGO_ENABLED = 1 的交叉编译
我希望从我的 Windows 机器上编译树莓派(更快)。
如果我使用此命令,一切正常:
env GOOS=linux GOARCH=arm GOARM=5 go build src/*.go
但是,我使用的 go-sqlite3
显然需要 CGO_ENABLED = 1
Binary was compiled with 'CGO_ENABLED=0',go-sqlite3 requires cgo to work. This is a stub
当我将编译命令更改为 env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 go build src/*.go
我在 Windows 上遇到错误
$ env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 go build src/*.go
# runtime/cgo
cgo: exec C:\Program: exec: "C:\\Program": file does not exist
这看起来是一个简单的修复,但我对交叉编译不是很满意。我在网上找不到太多。
编辑:
我移动了我的项目,现在出现以下错误:
$ env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 go build src/*
# runtime/cgo
gcc: error: unrecognized command line option '-marm'; did you mean '-mabm'?*
我在网上看了一圈,显然需要指定CC:
$ env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 CC=arm-linux-gnueabi-gcc go build src/*
# runtime/cgo
cgo: exec arm-linux-gnueabi-gcc: exec: "arm-linux-gnueabi-gcc": executable file not found in %PATH%
所以,我正在着手解决这个问题,但目前还没有。
我会尝试寻找如何在 Windows 上安装 gcc linux 并将其添加到 PATH
。但是,如果这不是正确的做法。我愿意寻求帮助
EDIT2
我从 https://gnutoolchains.com/raspberry/ 下载了一个工具链。我将 arm-linux-gnueabihf-gcc.exe
复制到 C:\Users\Me\go\bin
现在我又犯了一个错误
$ env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc go build src/*
# runtime/cgo
arm-linux-gnueabihf-gcc: error: CreateProcess: No such file or directory
我会继续发布我的进展,但我相信答案很简单。阿夫...
编辑 3 好的添加了系统环境的路径,现在找到了但是...... 我现在遇到了一些链接器问题
$ env GOOS=linux GOARCH=arm GOARM=5 CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc go build src/*.go
# command-line-arguments
C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running arm-linux-gnueabihf-gcc failed: exit status 1
arm-linux-gnueabihf-gcc: fatal error: -fuse-linker-plugin,but liblto_plugin-0.dll not found
compilation terminated.
解决方法
好的,所以通过编辑我展示了作品。
修复最初的问题cgo: exec C:\Program: exec: "C:\\Program": file does not exist
我在 GOPATH 中移动了项目。
修复第一个编辑 cgo: exec arm-linux-gnueabi-gcc: exec: "arm-linux-gnueabi-gcc": executable file not found in %PATH%
我从 https://gnutoolchains.com/raspberry/ 安装了工具链,并确保在用户和系统变量中都添加了 C:\SysGCC\raspberry\bin
。
为了修复第二个编辑 arm-linux-gnueabihf-gcc: fatal error: -fuse-linker-plugin,but liblto_plugin-0.dll not found
,我安装了 https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download 并确保安装了以下数据包
- mingw-developer-toolkit
- mingw32-base
- mingw32-gcc-g++
- msys-base
我不确定所有这些都是必要的。
我还确保
C:\MinGW\bin
在用户和系统变量中都存在。
然后我需要重新启动我使用过的所有终端,现在命令可以正确编译
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。