| g++和gcc是GNU编译器集合中的两个组件,g++是GNU C++编译器,gcc是GNU C语言编译器。 |
| 这两个编译器都使用glibc作为标准C库,glibc是GNU操作系统的标准C库,为支持C程序提供了许多函数和服务。 |
| |
| 简单说,glibc是C标准库的一个实现,它包括头文件、函数库和其他的应用程序。 |
| 而g++和gcc则是编译器,它们将源代码编译成可执行文件,通过调用glibc库中的函数来执行程序。 |
| |
| 当您使用g++编译C++代码时,它会链接到glibc库,并使用该库中的函数以进行内存分配、字符串处理等操作。 |
| 当您使用gcc编译C代码时,它也会链接到glibc库并使用标准C库中的函数。 |
| |
| 因此,glibc库是与g++和gcc紧密相关的一部分,它为这些编译器提供了基本的C和C++支持,并为应用程序提供了一组丰富的函数库。 |
| |
| musl libc 和 glibc 都是 C 语言的标准库。它们的功能类似,都包括了很多常用的函数,如字符串处理、文件操作、进程控制等等。它们的主要区别在于实现方式和设计哲学。 |
| |
| |
| |
| musl libc 是一个轻量级的 C 标准库,它的设计目标是尽可能小而快,同时提供最高的代码质量和安全性。 |
| musl libc 的源代码通常较短,编译速度较快,没有额外的依赖,因此非常适用于嵌入式系统和轻量级应用程序。 |
| |
| glibc 是一个较重的 C 标准库,它的设计目标是提供更广泛的功能和更高的兼容性。 |
| glibc 的源代码较长,编译速度较慢,有许多库文件和依赖项,因此通常用于桌面系统和服务器软件开发。 |
| |
| |
| |
| 总的来说,musl libc 和 glibc 都是优秀的 C 标准库,但在不同的场景下选择合适的库对于开发者来说非常重要。 |
| |
| musl libc 和 glibc 是两个常见的 C 标准库实现,它们有一些差异。下面列出了其中一些主要的差异: |
| 1、大小和速度:musl libc 要小得多,因为它没有像 glibc 那样提供大量的额外功能。相反,musl libc 专注于尽可能减少代码大小和函数调用开销,以提高性能。 |
| 2、兼容性:glibc 是 Linux 系统上最常见的 C 标准库,并且具有广泛的兼容性,支持许多架构和操作系统。相比之下,musl libc 对其他平台和操作系统的移植性较差。 |
| 3、实现方法:musl libc 是使用静态链接编译的,这使得它更易于构建和管理,并且不需要动态链接器。相反,glibc 使用动态链接器,这也使得它更灵活,因为它可以动态加载所需的库。 |
| 4、POSIX 标准:musl libc 更加严格地遵循 POSIX 标准,而glibc 则添加了一些扩展,以提供更多的功能和兼容性。 |
| 5、错误处理:musl libc 实现的错误处理更严格和更规范,而 glibc 则有更多的错误处理选项,并且支持不同的语言环境。 |
| 6、版权问题:由于采用了 BSD 许可证,musl libc 比 glibc 更容易以开源、商业和专有软件的形式使用。 |
| |
| 综上所述,选择使用 musl libc 还是 glibc 取决于您的具体需求。 |
| 如果您需要一个小巧且速度较快的C标准库在Linux系统上使用,则可以考虑使用musl libc |
| 如果您需要更广泛的兼容性和功能,则可以使用glibc |
| |
| 此映像基于Alpine Linux映像,该映像仅5MB,并且包含glibc以支持针对glibc编译的专有项目(例如 OracleJDK、Anaconda)在Alpine上工作。 |
| |
| 此映像包含一些使 glibc 与 musl libc(在 Alpine Linux 中默认)并行工作的怪癖。 |
| Alpine Linux 的glibc软件包由 Sasha Gerrand 编写,发布在 sgerrand/alpine-pkg-glibc github 存储库中。 |
| |
| 如果您需要更新libc库缓存,请使用 /usr/glibc-compat/sbin/ldconfig 而不是通常的 /sbin/ldconfig。您也可以像在基于libc的标准发行版上一样使用这些LD_LIBRARY_PATH。 |
| |
| |
| # 示例 |
| vim Dockerfile |
| FROM frolvlad/alpine-glibc |
| COPY ./my_app /usr/local/bin/my_app |
| |
| |
| $ docker build -t my_app . |
| |
后期工作
| # 对podman设置别名 |
| rambo@debian:~$ echo "alias docker='/usr/bin/podman'" >> .bashrc |
| rambo@debian:~$ source .bashrc |
| |
| # 设置国内源 |
| rambo@debian:~$ sudo vim /etc/containers/registries.conf # 在最后追加以下内容 |
| unqualified-search-registries = ["docker.io"] |
| |
| [[registry]] |
| prefix = "docker.io" |
| location = "2jriwsnk.mirror.aliyuncs.com" |
| |
| |
| # pull镜像 |
| rambo@debian:~$ docker pull frolvlad/alpine-glibc |
| rambo@debian:~$ docker pull debian |
| rambo@debian:~$ docker images |
| REPOSITORY TAG IMAGE ID CREATED SIZE |
| docker.io/library/debian latest 6f4986d78878 21 months ago 129 MB |
| docker.io/frolvlad/alpine-glibc latest fdba097f8ca0 22 months ago 18.3 MB |
| |
| # 启一个容器 |
| rambo@debian:~$ docker run -itd --name test1 --rm fdba0 /bin/sh |
| rambo@debian:~$ docker ps -a |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| 16e05a0274ac docker.io/frolvlad/alpine-glibc:latest /bin/sh 11 seconds ago Up 11 seconds ago test1 |
| |
| # 进入容器 |
| rambo@debian:~$ docker exec -it test1 /bin/sh |
| |
| |
| # 查看glibc版本 |
| / # ldd --version |
| musl libc (x86_64) |
| Version 1.2.2 |
| Dynamic Program Loader |
| Usage: /lib/ld-musl-x86_64.so.1 [options] [--] pathname |
| |
| |
| # 更换国内源 |
| / # cat /etc/apk/repositories |
| https://dl-cdn.alpinelinux.org/alpine/v3.15/main |
| https://dl-cdn.alpinelinux.org/alpine/v3.15/community |
| |
| / # sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories |
| 或者 |
| / # sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories |
| |
| |
| |
| # 常规用法 |
| apk search openssh # 查询openssh相关的软件包 |
| apk add xxx # 安装一个软件包 |
| apk del xxx # 删除已安装的xxx软件包 |
| apk --help # 获取更多apk包管理的命令参数 |
| apk update # 更新软件包索引文件 |
| |
| |
| # 安装示例 |
| apk add vim |
| apk add --no-cache mysql-client |
| apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted |
| |
| |
| |
.
.
.
.
已经有几个image使用此image,因此您可以将它们作为使用示例引用:
alpine-oraclejdk8
alpine-mono
deno
.
.
防走丢
| QQ群1:905201396 |
| QQ群2:756805267 |
| QQ群3:912567610 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2022-10-08 Linux综合记录
2019-10-08 RedHat Enterprise7 搭建ISCSI
2019-10-08 RedHat Enterprise7 修改为CentOS的yum源