概述
一、起因
工作中需要把 Golang 项目交叉编译成为Linux下可执行的二进制文件,但是由于本人电脑是 Windows 10,所以需要跨平台交叉编译。在 Windows下直接编译的话,会直接生成 *.exe
的可执行文件。Linux 环境下的可执行文件为二进制。还好 Golang 可以跨平台编译。
二、方法
普通的编译方法为
go build main.go
这样就会在工作目录下生成一个 main.exe
的可执行文件。
如果编译到Linux平台,可以添加设置
set GOOS=linux
//设置目标平台
set GOARCH=amd64
//设置目标架构
go build example.exe mian.go
这样就可以在 Windows 系统下编译 Linux 的 Golang 项目了。
三、问题
因为一个项目中包含了俩个编译脚本,所以把编译命令写在了 build.sh
文件内,用来实现项目的一键编译,但是出现了如下错误:
cannot find package "mian.gor" in any of:
/usr/local/bin/src/mian.go (from $GOROOT)
/Users/haiqingzhu/go/src/mian.go (from $GOPATH)
大概意思就是"没找到main.gor"这个包,但是在 mian.go
文件内并没有引用这个包,就算包的引用,也不会出现 .go
这样的引用,所以一时间无法排除。
四、原因
这个问题是由于 Windows 和 Linux 俩个系统的换行格式引起的。在Windows 下的换行格式为 CRLF
(如果是使用 VS cdode的可以看右下角),而在 Linux 下默认的换行格式是 LF
。这其中有什么差异呢?当你 “啪” 的一声按下回车键的时候,在 Windows 系统下会在文件中添加 rn
,而在 Linux 系统下则是在行末添加了 n
。但是由于回车的字符输入是不可见的,只是在视觉上看到了换行,所以挺隐蔽的。
上面的错误也就很明显了,因为编译命令的最后是 mian.go
,而在 Windows 系统下回车后,这一行变成了 ......mian.gorn
,在Linux下编译的时候,只是忽略了 n
这个换行记号,所以 r
也被误认为在命令中进行了编译,这就导致了错误。
五、解决方法
- 直接在Linux环境下编译 (麻烦)
- VS Code 可以在右下角点击
CRLF
选中LF
- 通常编译脚本不改变,所以可以改变git的通用设置:
git config --global core.autocrlf false
最后
以上就是深情大炮为你收集整理的Windows和Linux下的换行差异的全部内容,希望文章能够帮你解决Windows和Linux下的换行差异所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复