c - 如何声明加载动态库后可见的外部变量?
问题描述
我在某处看到在共享库中定义全局变量是一个坏主意(因为可能存在名称冲突?),最好将其封装在结构或类中。但是假设当前在共享库(.so 文件)中声明了一个变量,我应该编写一个使用该变量的 C 程序,并根据命令参数,来自不同源文件的对象的不同实例使用来自共享库的相同共享变量. 因此,在链接期间,我看不到该变量,并且它仅在加载动态库后的运行期间可用。并且假设我没有足够的时间来修改代码并且应该使用那个全局变量。我想到的第一个想法(我不知道我是否有第二个想法..)是:
在 C 程序 (my_prog.c) 中:
extern int __attribute__((weak)) var_x;
在共享库代码中:
int var_x;
当然在构建 my_prog 的过程中,不会出现链接错误。但是我不确定在var_x "in the shared library"
加载动态库后是否会使用 (即使在链接时链接了默认weak
变量)。这种方法有效吗?
解决方案
推荐阅读
- apache-kafka - 使用 Kafka Spout 的 Apache Storm 出现错误:IllegalStateException
- python - 如何在控制台中运行没有复制源的单元格?
- gwt - GWT Bootstrap 预输入事件监听器?
- mysql - 为什么我的 SQL 语句有时没有返回结果?
- javascript - 使用 JavaScript 将 qr 码生成的值放入输入字段的问题
- spring-boot - Spring引导休息调用中的无效mimetype异常
- postgresql - 表的浮动模式定义 - 如何在 pl/sql 中
- javascript - 为什么 Diff-match-patch 破坏 linediff 超过 65K 行
- java - 更改 java List 的输出顺序
- python - 装饰者:为什么我得到不同的结果?如果我传递一个带参数的函数,@ 符号是强制性的吗?