2017-02-13 51 views
1

我正在做一些研究,以便为新项目编译静态或动态的C++库。 (我也读过this answer)。我在OpenBSD和FreeBSD上看到,系统库比Linux(1.5 MB)大得多(5-7 MB),因为它们没有被剥离。所以我有两个问题:在OpenBSD和FreeBSD上没有剥离libstdC++系统库

  1. OpenBSD的libestdC++。so与libstdC++有所不同,所以呢?我没有找到任何信息,谷歌只是纠正我,删除这个词的“e”字母。
  2. 为什么这些库在BSD上如此之大?如果我想部署或静态链接它们,它们将是巨大的。有没有解决方法?

谢谢。

+0

你在说什么FreeBSD版本?因为FreeBSD 10似乎使用LLVM'libC++'代替。 – Nazar554

+0

我使用的是FreeBSD 10.3,看起来gcc使用的是stdlibC++,而不是libC++。我创建了一个简单的C++ 14二进制文件,这些是它的依赖文件: libstdC++。so.6 => /usr/local/lib/gcc49/libstdc++.so.6(0x800820000) libm.so.5 =>/lib/libm .so.5(0x800b33000) libgcc_s.so.1 => /lib/libgcc_s.so.1(0x800d5c000)libc.so.7 => /lib/libc.so.7(0x800f6a000) – Taw

回答

0

在OpenBSD上,libstdc++是基本C++库(GCC 4.2),libestdc++是从端口(GCC 4.9或6)安装的。这些库在OpenBSD上安装了符号,你可以用strip -s libwhatever.so去除符号。

+0

谢谢你的回答。我看到我可以去掉这些符号,但是我担心的是,如果我会这么做,我会不会“打破”(我们的构建机器被许多团队使用)。或者,也许我可以复制libestdC++,将其剥离并将我的二进制文件与剥离的文件相链接? – Taw

+0

您不会破坏lib的依赖关系。但是,由于不同的校验和,封装工具会投诉。我的建议是使用虚拟机来剥离和静态链接库,然后将其移至生产环境。 –