golang编译错误 copying /tmp/go-build069786374/b001/exe/a.out: No such file or directory 解决方法

问题: linux虚拟机 golang编译 报错 copying /tmp/go-build069786374/b001/exe/a.out: No such file or directory

原因:windows 和 linux 虚拟机 共享目录 不稳定造成导致

解决方法:重启 linux 虚拟机  重新共享目录 编译通过

详细过程如下:

今天在 build 命令源码文件 main.go 的时候,报如错误:

go build command-line-arguments: copying /tmp/go-build042781492/b001/exe/a.out: open main: text file busy

意思很明显,build 完成之后将编译后的文件覆盖之前生成的可执行文件 main 的时候,发现main文件被占用了,并且没有释放,无法覆盖。

因为我已经把 main 运行起来了,然后我修改了代码,重新 build 时出现的问题,按道理说应该不会出现这种问题的,想来想去,因为我用的时虚拟机+共享文件夹的形式运行的linux,之前就被这套文件系统坑过,此次事故大概率也是这个问题。

我先在windows上做测试。

package main

import (
    "fmt"
    "time"
)

func main() {
    time.Sleep(30*time.Second)
    fmt.Println("2")
}

要测试的东西是:在一个可执行文件正在运行时,修改代码,看能否编译成功并覆盖掉原来的可执行文件。

go build main.go

运行文件 main.exe

修改代码 fmt.Println(“3”)

新窗口 go build main.go

发现编译通过了,没报错,运行之 main.exe

结果是,第一个输出2,第二个输出3,证明是正常的。

于是,回到linux上,在共享目录之外的地方创建测试代码,我的共享目录是 /data/www/

cd /data
mkdir test
cd test
go mod init test
vi main.go

输入上面的测试代码

执行同样的测试步骤,发现也是正常的,看来这个原因就是虚拟机共享目录导致的。

猜你喜欢

转载自blog.csdn.net/whatday/article/details/114842628