我如何以编程方式确定我的c++运行时库在哪里
How can I programatically determine where my C++ runtime libraries are?
我正在使用"hax"在CentOS 6上构建带有GCC 4.8的c++ 11,然后部署在任意CentOS 6目标上(在这些目标上,任何与c++相关的开盒将被构建为带有GCC 4.3的c++ 03)(ref)。
为了完成这个工作,我将把我所有的第三方库和g++运行时一起发布,并且rpath
我的可执行文件,这样更新的库就可以在适当的地方找到。对于运行时,根据我的计算,我需要发布libstdc++
和libgcc_s
。但是我需要知道它们在我的构建系统中的位置,以便我可以将它们打包。
是否有一些整洁的方式,我可以查询他们的位置从我的包装脚本?
(如果最好的方法太笨拙,我就静态地链接它们,但我想避免这种情况,如果我可以,因为我的项目包括几个可执行文件。此外,如果我静态链接所有,我相信我会运行gpl的风险我的整个项目,例如通过我的c++ MySQL包装库静态链接MySQL C API。我想可以两者兼而有之,尽管有些来源警告不要这样做& help;)
对于奖励点,我是否需要在这个列表中添加任何东西,libssl
, libcrypto
, libm
, libpthread
, libc
, librt
, libz
和ld-linux-x86-64
?
如果我理解正确,您已经构建了二进制文件,只是想获得一个运行时库列表,以便将它们与二进制文件一起打包?您可以尝试使用ldd
,如:
> ldd /usr/bin/ls
linux-vdso.so.1 (0x00007ffe76dd2000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fc97131f000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007fc97111a000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007fc970f10000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc970b68000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007fc970902000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc9706fd000)
/lib64/ld-linux-x86-64.so.2 (0x000055c4ba4ed000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007fc9704f8000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc9702db000)
这样,您将看到所需的所有库,当然,通过dlopen()使用的库除外。
在我的Makefile:
GCC_INSTALL_DIR := $(shell $(CXX) -print-search-dirs | grep install | cut -d' ' -f2)
& help;那么我的主要构建目标将执行:
ln -sf $(GCC_INSTALL_DIR)/libstdc++.so $(BIN_DIR)/deps/
& help;并且我可以将$(BIN_DIR)/deps
中的所有内容转储到安装时的正确位置。
。
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 为什么我的删除节点函数实际上没有删除节点?