如何正确定位用于编译autotools项目的libstdc++.so.*
,以便将其与分发捆绑在一起?
在我们的团队切换到C ++ 11之后,我们需要将新的libstdc ++。so.6与我们软件的每个发行版捆绑在一起,但是如何正确地找到库?
/lib/gcc/x86_64-pc-cygwin/5.2.0
/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
,这就是我们自己捆绑的全部原因。
答案 0 :(得分:3)
g++ -print-file-name=libstdc++.so
答案 1 :(得分:2)
为什么不直接与-static-libstdc++
选项相关联(如果需要,还可以-static-libgcc
)?然后,您不必担心捆绑,库搜索路径等。