【发布时间】:2012-11-18 03:50:24
【问题描述】:
我需要将基于 Ubuntu 12.10 和 GCC 4.7 的 libstdc++ 构建的 C++ 应用程序部署到运行 Ubuntu 10.04 的系统上,该系统带有相当旧版本的 libstdc++。
目前,我正在使用 -static-libstdc++ -static-libgcc 进行编译,正如这篇博文所建议的那样:Linking libstdc++ statically。作者警告不要在静态编译 libstdc++ 时使用任何动态加载的 C++ 代码,这是我尚未检查的内容。尽管如此,到目前为止一切似乎都很顺利:我可以在 Ubuntu 10.04 上使用 C++11 功能,这正是我所追求的。
我注意到这篇文章是从 2005 年开始的,也许从那时起发生了很大变化。它的建议是否仍然有效?有什么我应该注意的潜在问题吗?
【问题讨论】:
-
不,静态链接到 libstdc++ 并不意味着这一点。如果它确实暗示了
-static-libstdc++选项将毫无意义,您只需使用-static -
@JonathanWakely -static 在某些 ubuntu 1404 系统中会得到
kernel too old错误。 glibc.so 就像窗口中的kernel32.dll,它是操作系统接口的一部分,我们不应该将它嵌入到我们的二进制文件中。您可以使用objdump -T [binary path]来查看它是否动态加载libstdc++.so。对于golang程序员,你可以在import "C"之前添加#cgo linux LDFLAGS: -static-libstdc++ -static-libgcc -
@bronzeman,但我们谈论的是
-static-libstdc++而不是-static所以libc.so不会被静态链接。 -
@NickHutchinson 链接到的博客文章不见了。这个 SO question 是此处相关术语的热门搜索。您能否在您的问题中复制该博客文章中的关键信息,或者如果您知道它的位置,请提供一个新链接?
-
@BrianCain 互联网档案有它:web.archive.org/web/20160313071116/http://www.trilithium.com/…
标签: c++ linux gcc static-libraries libstdc++