【发布时间】:2017-09-20 18:50:49
【问题描述】:
我在 global.c 文件中定义了一些全局变量,如下所示:
int globalvar;
我有一个头文件 global.h 将这个变量声明为 extern
extern int globalVar;
现在我有 main.c,它与已编译的 global.o(从 global.c 编译)链接,具有打开(使用 dlopen)共享对象 sh.so 的代码,该共享对象从 sh.c 构建并可以访问 globalVar,通过 global.h。 虽然,我的可执行文件定义了 globalVar(静态链接),但当我加载动态链接库 sh.so 时,它显示 undefined globalVar。 如何处理?
【问题讨论】:
-
IIRC exe 本身中的符号根本不被共享库使用 - 默认情况下。
-
-Wl,--export-dynamic -
考虑摆脱意大利面条全局变量,这个问题也会消失。请改用 setter/getter 函数。
标签: c global-variables shared-libraries extern dlopen