gpt4 book ai didi

c++ - Linux 共享库中缺少函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:25 26 4
gpt4 key购买 nike

我支持一个 Linux 程序,它允许用户编写他们自己的基于 .so 文件的插件,这些插件在运行时使用 dlopen() 加载。有时用户会忘记在 makefile 中包含一个包含必要函数定义的 C++ 文件。当插件管理器使用 dlsym() 从依赖于这些缺失函数定义之一的插件加载导出函数时,我得到一个空函数地址。

我的问题:如何提前检测到此错误?我试过 -z defs 和 -Wno-undef 链接器标志,但它们不会产生错误。我尝试了带有各种标志的 nm、readelf 和 objdump 命令,但未定义的函数根本没有出现在符号表中。有什么建议么?谢谢!

最佳答案

我怀疑空函数地址主要是在 .so 文件中使用一些第三方库而linux程序做dlopen()时,找不到第三方,返回空函数地址

我建议在“好”和“坏”.so 文件上尝试 nm 命令并寻找带有“U”( undefined symbol )的符号模式“坏”.so 文件会有更多的“U”

另见 Unresolved external symbol in object filesLinux shared library that uses a shared library undefined symbol

关于c++ - Linux 共享库中缺少函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57681757/

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