首页 > 解决方案 > 如何声明加载动态库后可见的外部变量?

问题描述

我在某处看到在共享库中定义全局变量是一个坏主意(因为可能存在名称冲突?),最好将其封装在结构或类中。但是假设当前在共享库(.so 文件)中声明了一个变量,我应该编写一个使用该变量的 C 程序,并根据命令参数,来自不同源文件的对象的不同实例使用来自共享库的相同共享变量. 因此,在链接期间,我看不到该变量,并且它仅在加载动态库后的运行期间可用。并且假设我没有足够的时间来修改代码并且应该使用那个全局变量。我想到的第一个想法(我不知道我是否有第二个想法..)是:

在 C 程序 (my_prog.c) 中:

extern int __attribute__((weak)) var_x;

在共享库代码中:

int var_x;

当然在构建 my_prog 的过程中,不会出现链接错误。但是我不确定在var_x "in the shared library"加载动态库后是否会使用 (即使在链接时链接了默认weak变量)。这种方法有效吗?

标签: ccompilationlinker

解决方案


推荐阅读