SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go //开始编译程蠢乎序
Go 语言和 C 语言的或散枯一个很大的区别是, Go 语言只静态衫洞编译,做个测试:
一方面是 Go 语言编译后的可执行文件大小比 C 语言的大很多,
另一方面掘咐是 C 语言的可执行文件需要依赖 glibc 动态库,
用 ldd 命令可以看出来:
或者直接删除 glibc 动态库, C 可执行程序报错,而 Go 的还能运行:
这时候只有内部命令可以运行,外部命令,包括 ln 甚至最常用的 ls 命令也不能运行了:
设置好 LD_PRELOAD 环境变量之后, ln 命令可以运行,但是 sudo 仍然不能运行
只能靠 root 用户来重新创建软连接了:
所以用 sudo 来 rm 文件要小心,还是用 root 比较好。如果没有预先留一个打开的 root 终端,登录都登不进去。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)