我的项目依赖于第三方库,该库可以导出更多应有的符号。其中一些符号被其他库和主程序非故意覆盖。
如何更改已编译共享库的功能和变量的可见性?
答案 0 :(得分:0)
如果您可以通过dlopen
动态加载有问题的库,则可以使用RTLD_DEEPBIND
标志来强制它优先于本地符号而不是主要可执行文件或其他shlibs中的本地符号。
如果您不想手动管理dlopen
和dlsym
调用,则可以创建一个简单的包装文件,其中包含用于必要功能的蹦床。如果每个蹦床之前都未加载,则它们会在内部dlopen
内部,然后将调用转发到具有相同名称的dlsym
-ed符号。此类包装文件可以通过EmptyDir volume自动生成。