gpt4 book ai didi

c++ - 静态链接系统库、libc、pthreads,以帮助调试

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:32 24 4
gpt4 key购买 nike

我正在努力避免 Stackoverflow 条目中描述的情况:Debugging core files generated on a Customer's box .如果我静态编译所有库,我是否可以避免在核心转储时总是收集共享库?我基本上希望处于这样一种情况,即我可以使用 gdb 加载核心文件并检查崩溃的应用程序。

如果我走静态链接我们需要的所有库的路线,我应该注意什么。我认为 glib 和 pthreads 可能会导致最大的问题。

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

我们经常崩溃,因为我们拥有庞大的安装基础,而且它也是一个遗留应用程序。收集所有共享库变得很棘手 - 我需要另一种解决方案。

编辑:修正错别字。

最佳答案

If I compile all the libraries statically will I avoid having to always gather the shared libraries when it core dumps

是的。

然而,与普遍的看法相反,静态链接的二进制文件不如可移植的动态链接的二进制文件(至少在 Linux 上)。

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

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

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

关于c++ - 静态链接系统库、libc、pthreads,以帮助调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com