libgcc_s.so是否在同一进程中静态和动态链接?

5 c c++ linux libstdc++ libgcc

我的应用程序引入了许多共享库.有些是用C++编写的,它引入了libstdc ++.所以它引入了libgcc_s.so.还有一些是用简单的C编写的,并与-static-libgcc相关联.

所以现在我在多个共享库中静态链接了一些libgcc,并且libstdc ++在运行时动态加载libgcc的其他位.

Q1:这个设置会给我带来麻烦吗?libgcc是否具有会使这种混合链接出现问题的内部状态,还是只是内联函数?

Q2:为了让我的应用程序适用于较旧的Linux,我应该发布libstdc ++.so和libgcc_s.so并在主exe上使用rpath来加载它.这是正确的方法吗?

Amr*_*man 0

这个设置会给我带来麻烦吗?

绝对不是。静态链接库在程序内部合并,就像在程序自己的结构中实现一样。
来自维基百科:(我的重点)

静态库或静态链接库是一组例程、外部函数和变量,它们在编译时在调用方中解析,并由编译器、链接器或绑定器复制到目标应用程序中,生成目标文件和立场-单独可执行。

看到这个支持性的想法
至于您评论中的崩溃,这很可能是一个错误。

libgcc 是否具有会使这种混合链接出现问题的内部状态,或者它只是内联函数?

不,只是内联函数。

为了让我的应用程序在较旧的 Linux 上运行,我应该提供 libstdc++.so 和 libgcc_s.so 并在主 exe 上使用 rpath 来加载它。这是正确的做法吗?

这个问题有点建议,所以我要说我会怎么做。我会在运行时在标准/默认动态链接搜索路径中搜索 libstdc++.so (可能在环境变量或某个文件中,具体取决于系统),如果找到,则加载它。如果未找到,请加载附带的库。如果您事先知道系统没有这些动态库,那么我建议改用程序的静态构建。