Linux 进程:在两个库之间动态共享一个变量
Linux process: dynamically share a variable between two libraries
全部在 c 代码中,我有一个 linux Gnome 进程,它可能加载两个库 libA.so 和 libB.so。
libA 需要导出一个全局变量 int varA。
仅当进程中存在 libA 时,libB 才需要访问 varA。
如何使用以下约束来做到这一点:
libB 不得 link 对抗 libA。此外,该进程可能只加载 libB 而从不接触 libA。我不控制流程,因此流程源代码中不应包含任何代码。只允许使用 libB 中的代码:它需要检查进程中是否存在 libA,如果是,则需要访问 varA。如果 libA 不存在,libB 应该知道它无法访问 varA。
我正在考虑使用 g_module_open / g_module_symbol,但我认为它会强制加载我不想加载的 libA。我如何在 libB 中以编程方式检查 libA 是否存在,然后仅在这种情况下访问 varA?
dl_iterate_phdr 和 dlsym 是 API 用来解决这个问题。
全部在 c 代码中,我有一个 linux Gnome 进程,它可能加载两个库 libA.so 和 libB.so。
libA 需要导出一个全局变量 int varA。
仅当进程中存在 libA 时,libB 才需要访问 varA。
如何使用以下约束来做到这一点:
libB 不得 link 对抗 libA。此外,该进程可能只加载 libB 而从不接触 libA。我不控制流程,因此流程源代码中不应包含任何代码。只允许使用 libB 中的代码:它需要检查进程中是否存在 libA,如果是,则需要访问 varA。如果 libA 不存在,libB 应该知道它无法访问 varA。
我正在考虑使用 g_module_open / g_module_symbol,但我认为它会强制加载我不想加载的 libA。我如何在 libB 中以编程方式检查 libA 是否存在,然后仅在这种情况下访问 varA?
dl_iterate_phdr 和 dlsym 是 API 用来解决这个问题。