我支持一个 Linux 程序,该程序允许用户编写自己的基于 .so 文件的插件,这些插件在运行时使用 dlopen() 加载。有时用户会忘记在包含必要函数定义的 makefile 中包含一个 C++ 文件。当插件管理器使用 dlsym() 从依赖于这些缺失函数定义之一的插件加载导出函数时,我得到一个空函数地址。
我的问题:我怎样才能提前检测到这个错误?我试过 -z defs 和 -Wno-undef 链接器标志,但它们不会产生错误。我已经尝试了带有各种标志的 nm、readelf 和 objdump 命令,但是未定义的函数根本没有出现在符号表中。有什么建议?谢谢!