所有的c代码,我有一个linux Gnome进程,它可能加载两个库libA.so和libB.so。
libA需要导出全局变量int varA。
只有当进程中存在libA时,libB才需要访问varA。
如何使用以下约束来执行此操作:
libB不得链接libA。此外,该进程可能只加载libB而从不接触libA。我不控制进程,因此代码不应驻留在进程源代码中。只允许libB中的代码:它需要检查进程中是否存在libA,如果是这种情况,则需要访问varA。如果libA不存在,libB应该知道它无法访问varA。
我正在考虑使用g_module_open / g_module_symbol,但我认为它会强制加载我不想要的libA。如果存在libA,我如何在libB中以编程方式检查,然后仅在这种情况下访问varA?
答案 0 :(得分:0)
dl_iterate_phdr和dlsym是用于解决此问题的API。