在共享库中使用全局变量

时间:2010-11-27 13:08:47

标签: c unix shared-libraries shared

我在C中编写一个使用全局变量(日志文件结构)的应用程序。在我的应用程序中,我在运行时动态加载共享库,我想使用指向相同日志文件结构的全局变量来记录共享库。

这似乎不太可能采用简单的方法:

  • 将全局变量声明为extern将不起作用,因为dlopen()sais表示全局变量是未定义的符号
  • 再次定义全局变量将起作用,但“new”变量将不会与可执行文件中的“原始”变量相同

任何暗示如何解决这个问题都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:8)

您需要使用-rdynamic标记(例如:gcc -g -rdynamic -o main main.c)编译主应用程序,并使用extern在动态库中声明全局变量。