如何正确捆绑 libstdc++.so.*?
How to bundle libstdc++.so.* correctly?
如何正确定位 libstdc++.so.*
用于编译 autotools 项目,以便将其与发行版捆绑在一起?
我们团队切换到 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,我不确定它是否适用于其他平台,因此我的问题。
编辑
请参阅 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
如何正确定位 libstdc++.so.*
用于编译 autotools 项目,以便将其与发行版捆绑在一起?
我们团队切换到 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,我不确定它是否适用于其他平台,因此我的问题。
编辑
请参阅 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