修改已编译共享库中符号的可见性

时间:2019-03-12 12:30:13

标签: shared-libraries visibility elf

我的项目依赖于第三方库,该库可以导出更多应有的符号。其中一些符号被其他库和主程序非故意覆盖。

如何更改已编译共享库的功能和变量的可见性?

1 个答案:

答案 0 :(得分:0)

如果您可以通过dlopen动态加载有问题的库,则可以使用RTLD_DEEPBIND标志来强制它优先于本地符号而不是主要可执行文件或其他shlibs中的本地符号。

如果您不想手动管理dlopendlsym调用,则可以创建一个简单的包装文件,其中包含用于必要功能的蹦床。如果每个蹦床之前都未加载,则它们会在内部dlopen内部,然后将调用转发到具有相同名称的dlsym-ed符号。此类包装文件可以通过EmptyDir volume自动生成。