在共享库中使用全局变量
我正在用 C 编写一个应用程序,它使用全局变量(日志文件结构)。在我的应用程序中,我在运行时动态加载共享库,并且我想使用指向相同日志文件结构的全局变量来记录共享库。
这在简单的方法中似乎是不可能的:
- 将全局变量声明为 extern 将不起作用,因为 dlopen() 表示全局变量是一个未定义的符号,
- 再次定义全局变量将起作用,但“新”变量将不起作用与可执行文件中的“原始”相同
任何有关如何解决此问题的提示都会很棒。
谢谢你!
I am writing an application in C which used a global variable (a logfile structure). In my application I am loading shared libraries dynamically at runtime and I want to use a global variable pointing at the the same logfile structure to do logging in the shared library.
This doesn't seem to be possible in the easy approach:
- declaring the global variable as extern will not work because dlopen() sais that the global variable is an undefined symbol
- defining the global variable again will work but the "new" variable will not be the same as the "original" one in the executable
Any hint how to fix this would be great.
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用 -rdynamic 标志编译主应用程序(例如:gcc -g -rdynamic -o main main.c ),并在动态库中声明全局变量与
extern
。You need to compile your main application with
-rdynamic
flag (eg:gcc -g -rdynamic -o main main.c
, and to declare the global variable in your dynamic library withextern
.