如何正确捆绑 libstdc++.so.*?

How to bundle libstdc++.so.* correctly?

如何正确定位 libstdc++.so.* 用于编译 autotools 项目,以便将其与发行版捆绑在一起?

我们团队切换到 C++11 后,我们需要将新的 libstdc++.so.6 捆绑到我们软件的每个发行版中,但如何正确找到该库?

我已经试过了:

install-exec-local:
    cp $(shell dirname $(shell which ${CXX}))/../lib64/libstdc++.so.6 ${prefix}/lib

(而不是make dist,我们make install到配置的前缀中然后捆绑前缀)

这有效,但不适用于 Cygwin,我不确定它是否适用于其他平台,因此我的问题。

编辑

请参阅 this question 了解与软件捆绑 libstdc++.so 的基本原理。 效果很好。我们还使用 dlopen 加载依赖于 libstdc++.so.so,因此静态 link 比听起来更难。

唯一的问题是在 make dist 时间(或我们的等效时间)找到 libstdc++.so.6,这样我就可以 cp 它到我们发行版的 ${prefix}/lib 目录,在 tar-gzip 压缩并将其交付给客户之前。理想情况下,我正在寻找类似 g++ --print-path-to-libstdc++.so.

的内容

target 系统,软件是 运行,有一个 older libstdc++.so,这就是捆绑我们的全部原因拥有。

为什么不 link 使用 -static-libstdc++ 选项(如果需要,也可以使用 -static-libgcc)?然后你就不用担心捆绑、库搜索路径等问题

g++ -print-file-name=libstdc++.so