Alpine Linux库在libstdc和x2B中缺少GLIBCXX+;。所以 我试图用AlpLinux Linux来进行容器化C++应用。由于图像大小的原因,我们正在尝试从Ubuntu切换到Alpine Linux 我在C++构建过程中遇到了几个错误,大多数都是通过安装适当的包来解决的。我终于到达了一个无法克服这一特定错误的地步: undefined reference to `operator new(unsigned long)@GLIBCXX_3.4'

Alpine Linux库在libstdc和x2B中缺少GLIBCXX+;。所以 我试图用AlpLinux Linux来进行容器化C++应用。由于图像大小的原因,我们正在尝试从Ubuntu切换到Alpine Linux 我在C++构建过程中遇到了几个错误,大多数都是通过安装适当的包来解决的。我终于到达了一个无法克服这一特定错误的地步: undefined reference to `operator new(unsigned long)@GLIBCXX_3.4',c++,c,linux,makefile,alpine,C++,C,Linux,Makefile,Alpine,经过一些研究,我建议使用以下命令检查/usr/lib/libstdc++.so.6.0.28文件中是否存在GLIBCXX_3.4,输出如下: bash-5.0# strings /usr/lib/libstdc++.so.6.0.28 | grep GLIBC GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH 没有GLIBCXX_3.4或任何版本的GLIBCXX或GLIBC 在Ubuntu中运行相同的命令会产生以下结果: root@379aa5a6

经过一些研究,我建议使用以下命令检查
/usr/lib/libstdc++.so.6.0.28
文件中是否存在
GLIBCXX_3.4
,输出如下:

bash-5.0# strings /usr/lib/libstdc++.so.6.0.28 | grep GLIBC
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
没有
GLIBCXX_3.4
或任何版本的
GLIBCXX
GLIBC

在Ubuntu中运行相同的命令会产生以下结果:

 root@379aa5a61642:/app# strings /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.so | grep GLIB
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.14
GLIBC_2.6
GLIBC_2.4
GLIBC_2.18
GLIBC_2.16
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
显然,Ubuntu似乎拥有所有的油嘴滑舌的版本。有人能帮我解决这个问题吗


谢谢。

我真的不明白你为什么需要glibc二进制文件。阿尔卑斯内置C++支持是针对MUML构建的,不需要GLIMC。我的经验是,我在阿尔卑斯山图像中添加的glibc支持越多,我就越希望使用UBI或其他东西。如果你不需要glibc,Alpine最适合作为基础图像。我们使用的是专有库,我认为该库引用了glibc。我们的计划是利用Docked alpine linux构建我们的应用程序,但到目前为止还没有实现。当然,C中有一些广泛使用的glibc扩展,在MUSL中并不存在;但对我来说,图书馆“参考glibc”听起来有点不可靠。除了使用仅存在于glibc中的函数之外,我甚至不知道库作者如何实现这一点。当您针对给定的C库编译软件时,这种情况会自动发生。例如,由于符号版本控制,根据Glibc 2.12编译的简单应用程序可能不会在Glibc 2.5上运行。最好是针对目标平台(Alpine的情况下是MUSL)编译软件,但如果你坚持使用预编译库,你可能需要使用基于Glibc的系统。我真的不明白你为什么需要Glibc二进制文件。阿尔卑斯内置C++支持是针对MUML构建的,不需要GLIMC。我的经验是,我在阿尔卑斯山图像中添加的glibc支持越多,我就越希望使用UBI或其他东西。如果你不需要glibc,Alpine最适合作为基础图像。我们使用的是专有库,我认为该库引用了glibc。我们的计划是利用Docked alpine linux构建我们的应用程序,但到目前为止还没有实现。当然,C中有一些广泛使用的glibc扩展,在MUSL中并不存在;但对我来说,图书馆“参考glibc”听起来有点不可靠。除了使用仅存在于glibc中的函数之外,我甚至不知道库作者如何实现这一点。当您针对给定的C库编译软件时,这种情况会自动发生。例如,由于符号版本控制,根据Glibc 2.12编译的简单应用程序可能不会在Glibc 2.5上运行。最好是针对目标平台(Alpine的情况下是MUSL)编译软件,但如果您坚持使用预编译库,则可能需要使用基于Glibc的系统。