1

我有一个应用程序(application1),它使用 dlopen 在 mips 处理器中的 linux 内核 2.6.31 中动态加载其他应用程序。我使用的编译器是 mips_linux_uclibc_gcc。

application1 包含一个全局变量 say (int dynamic_variable) 并为其分配了一些 value 。在这个分配之后,我动态加载另一个应用程序(application2),它包含一个同名的全局变量(int dynamic_variable),如果我给这个变量分配了一些值,application1 中变量的值也会改变。

application1 和 application2 中的全局变量的地址相同。因此它们在 Atheros Board 中引用相同的地址,但在 Ubuntu 12.04 中它们是不同的。

在 Ubuntu 12.04 中, application2 中的地址与我在动态加载 application2 时使用 api dlsym(handle,"dynamic_variable") 获得的地址相同。所以我知道 appliation2 指的是它自己的全局变量,但在 Atheros 中它指的是 application1 的全局变量。

我认为全局变量将位于全局名称空间中并且不会被覆盖,但我得到了不同的结果。但是在带有 gcc 编译器的 ubuntu 12.04 中它工作正常;变量的值没有被替换。

它是与 mips 处理器中实现的 dl 库相关还是特定于它的编译器?

4

0 回答 0