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

时间:2015-11-21 09:04:07

标签: c++ c++11 gnu-make autotools libstdc++

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

在我们的团队切换到C ++ 11之后,我们需要将新的libstdc ++。so.6与我们软件的每个发行版捆绑在一起,但是如何正确地找到库?

  • Cygwin:/lib/gcc/x86_64-pc-cygwin/5.2.0
  • Linux:/usr/lib64
  • 自定义安装:/usr/local/gcc-5.2.0/lib64

我已经尝试过:

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

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

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

修改

有关将libstdc++.so与软件捆绑在一起的理由,请参阅this question效果很好。我们还使用dlopen加载依赖于.so的{​​{1}},因此静态链接比听起来更难。

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

运行软件的目标系统有一个 g++ --print-path-to-libstdc++.so,这就是我们自己捆绑的全部原因。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

为什么不直接与-static-libstdc++选项相关联(如果需要,还可以-static-libgcc)?然后,您不必担心捆绑,库搜索路径等。