繁体   English   中英

Linux共享库中缺少函数

[英]Missing functions in Linux shared library

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

我的问题:我怎样才能提前发现这个错误? 我已经尝试了-z defs和-Wno-undef链接器标志,但它们不会生成错误。 我已尝试使用各种标志的nm,readelf和objdump命令,但未定义的函数根本不会出现在符号表中。 有什么建议? 谢谢!

我怀疑null函数地址主要是在.so文件中使用某些第三方库的结果,当linux程序执行dlopen()时,它找不到第三方,然后返回null函数地址

我建议对“好”和“坏”.so文件尝试nm命令,并查找带有'U'(未定义符号)“坏”的符号模式.so文件会有更多'U'

另请参见目标文件中未解析的外部符号使用共享库未定义符号的Linux共享库

--no-undefined / -z defs文档:

仍允许共享库中的未定义符号。

使用另一个标志: --no-allow-shlib-undefined

允许或禁止共享库中的未定义符号。 此开关类似于--no-undefined但它确定未定义符号位于共享库而不是常规对象文件中时的行为。 它不会影响常规对象文件中未定义的符号的处理方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM