静态链接系统库,libc,pthreads,以帮助调试

Statically linking system libraries, libc, pthreads, to aid in debugging

本文关键字:帮助 调试 pthreads libc 链接 系统库 静态      更新时间:2023-10-16

我正在努力避免这个Stackoverflow条目中描述的情况:调试在客户上生成的核心文件';s框。如果我静态编译所有库,我会避免在核心转储时总是收集共享库吗?我本质上想处于这样一种情况:我可以用gdb加载核心文件,并检查崩溃的应用程序。

如果我走静态链接我们需要的所有库的路线,我应该注意什么。我认为油嘴滑舌和深度阅读可能会造成最大的问题。

Valgrind会不再有用吗?如果我根据静态编译的二进制文件加载Valgrind,它会发现错误吗?或者我们应该维护一个不是静态编译的二进制文件,以便Valgrind继续工作。斯特拉斯怎么样?

我们经常崩溃,因为我们有一个庞大的安装群,而且它也是一个遗留应用程序。收集所有共享库变得越来越困难——我需要另一个解决方案。

编辑:修复了打字错误。

如果我静态编译所有库,我会避免在核心转储时总是收集共享库吗

是的。

然而,与流行的观点相反,静态链接的二进制文件比动态链接的二进制(至少在Linux上)的可移植性要低。

特别是,如果您使用以下函数中的任何一个:gethostbynamegethostbyaddrgetpwentgetpwnamgetpwuid(以及更多),您将在链接时收到警告,类似于以下内容:

Using 'getpwuid' in statically linked applications requires at runtime
the shared libraries from the glibc version used for linking.

此警告的意思是,如果您的客户安装的glibc版本与您在链接时使用的版本不同(即与系统libc版本不同),程序可能会崩溃。由于这显然比您当前的情况更糟,我认为静态链接对您来说不是一个好的解决方案。