当前位置: 代码迷 >> 综合 >> go build command-line-arguments: copying /tmp/go-build042781492/b001/exe/a.out: open main: text file
  详细解决方案

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

热度:3   发布时间:2023-12-09 10:51:42.0

今天在 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 mainimport ("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

输入上面的测试代码

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

  相关解决方案