Go:使用 PIE 编译为静态二进制文件

Sigurþór Björgvinsson

我希望创建一个二进制文件,它可以在没有链接的环境中执行,但也可以在链接器可用但需要 PIE 的情况下执行。

我得到的关闭是链接器声明它是静态链接的,但“文件”仍然说它是一个动态二进制文件。

有没有办法获得一个对链接器没有外部依赖并且不是 LSB 共享对象的二进制文件?

go1.15.2 示例:

% echo "package main;import \"fmt\";func main() {fmt.Println(\"Simple Example\")}" > main.go
% GOOS=linux go build  -ldflags "-linkmode=internal -s -w" -buildmode=pie -o mainProc main.go
% ldd mainProc
    statically linked
% file mainProc
mainProc: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=8mM4GRs9zxgrVjDRg2Ch/efne9QJbJLpmKT6hRtJm/JWUYVr1m9OhJoV0v1uwq/1IZdDT8CvBOOywiI8eQq, stripped
Sigurþór Björgvinsson

解决了:

go build  -ldflags '-linkmode external -s -w -extldflags "--static-pie"' -buildmode=pie -tags 'osusergo,netgo,static_build' -o /hello hello.go

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Bazel将二进制文件编译为多个版本的.NET Framework

使用go动态创建编译的二进制文件

您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX2 FMA

“您的 CPU 支持此 TensorFlow 二进制文件未编译为使用的指令:AVX2”错误

重定位应该如何在静态 PIE 二进制文件中工作?

使用静态对象构建二进制文件

使用NDK 13编译独立的二进制文件

使用VexCL“编译二进制文件”

如何静态链接使用crypto / tls的Go二进制文件?

是否可以通过使用 TinyGo 编译 Go 二进制文件来使其更小?

有没有一种方法可以将Python程序编译为二进制文件,并与Scratch Dockerfile一起使用?

go-使用struct读取二进制文件

是否可以使用`go install`而不是`go test -c`来编译测试二进制文件

如何制作使用 openmp 并使用 intel 的 C 编译器编译的二进制文件?

如何为Docker Alpine映像构建静态Go二进制文件?

如何创建在每个发行版上运行的静态Go二进制文件?

仅打包使用Cython编译的python库的二进制编译.so文件

将编译后的Go二进制文件放在哪里?

如何确定哪个Go版本用于编译二进制文件

编译二进制文件比运行“ go run”要慢

使用CGO,LuaJIT和Musl构建静态二进制文件

如何使用旧内核为GNU / Linux安装构建静态二进制文件?

对 Discord Bot 使用 ffmpeg 静态而不是二进制文件

在GHC编译的二进制文件中过多使用神秘的系统时间

如何检查使用哪个编译器生成二进制文件

使用Linux预编译二进制文件的Java / JNI的Vowpal wabbit

为什么默认情况下不使用gcc编译二进制文件

如何在Linux上的C库中使用已编译的二进制文件?

使用Ansible编译和安装简单的二进制文件