GO 的静态链接 Day3 | 青训营

2023年 8月 24日 56.2k 0

GO 的静态链接

学了很多新内容 之前没接触过这部分 今天复习巩固了静态链接的知识。

可以发现从 linux/arm64的嵌入式系统到 linux/s390x 的大型机系统,再到Windows、linux和 darwin(mac)这样的主流操作系统、amd64、386这样的主流处理器体系,Go 对各种平台和操作系统的支持确实十分广泛。

Go 的运行机制发现 Go 程序是通过 runtime 这个库实现与操作内核系统交互的。Go 自己实现了 runtime,并封装了syscall,为不同平台上的go user level代码提供封装完成的、统一的go标准库。

首先我们来书写两个程序,一个 C语言的一个 Go 语言的:

hello.c

#include

int main() {
printf("Hello, C!\n");
return 0;
}
编译后使用 ldd 命令查看其链接库:

1. 编译

gcc -o hc hello.c

2. 查看其依赖共享库

ldd hc

linux-vdso.so.1 => (0x00007fff85b6e000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe87ff1a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe8802e8000)
我们发现这个 C程序编译出来后的二进制文件会需要这三个库文件,因此如果我们将它做移植时会因为缺失动态库文件而造成无法运行。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论