【问题标题】:Segmentation fault debian 8 golang分段错误debian 8 golang
【发布时间】:2026-01-01 23:20:23
【问题描述】:

tstx 程序代码(golang)

package main

import "fmt"

func main(){
 fmt.Printf("Hello")
}

在开发计算机(基于 debian 的 linux)上一切正常,但是 当我在服务器计算机(Debian 8)上运行它时,我遇到了分段错误

两个系统都是amd64,代码用[go build]编译

[strace ./tstx] - 说

execve("./tstx", ["./tstx"], [/* 16 vars */]) = 0                                                                                                                                                                  
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffffffffffff8b} ---                                                                                                                                
+++ killed by SIGSEGV +++    

【问题讨论】:

  • 这是go1.7吗?你的“基于 debian 的 linux”是什么?
  • 是的,go1.7,我的 linux - kali
  • 你是在debian机器上编译程序,还是从kali机器上复制二进制文件?我会从 go 邮件列表开始或打开一个问题。这不是调试语言运行时或操作系统错误的地方。
  • 我正在从kali复制到debian
  • 是的,我怀疑 kali 正在做一些事情,但我不确定是什么副手。这可能更适合特定于 go 的论坛。

标签: linux go segmentation-fault debian


【解决方案1】:

由于您是在一台机器上进行编译并转移到另一台机器上,因此您确实需要确保 DLL 不是问题。首先,构建:

CGO_ENABLED=0 go build...

并确保它看起来不错:

ldd tstx

(它应该返回“不是动态可执行文件”或类似内容)。

禁用 CGO 意味着可执行文件会更大(所有内容都是静态链接的),但 dll 不会成为问题,因为它是独立的。最后,通过 uname 验证它们的架构是否相同不会有什么坏处...

【讨论】: