【发布时间】:2011-11-15 11:46:55
【问题描述】:
我有以下结构:
struct sys_config_s
{
char server_addr[256];
char listen_port[100];
char server_port[100];
char logfile[PATH_MAX];
char pidfile[PATH_MAX];
char libfile[PATH_MAX];
int debug_flag;
unsigned long connect_delay;
};
typedef struct sys_config_s sys_config_t;
我还在静态库中定义了一个函数(我们称之为 A.lib):
sys_config_t* sys_get_config(void)
{
static sys_config_t config;
return &config;
}
然后我有一个程序(我们称之为 B)和一个动态库(我们称之为 C)。 B 和 C 都与 A.lib 链接。在运行时,B 通过dlopen() 打开C,然后通过调用dlsym() 获得C 的函数func() 的地址。
void func(void)
{
sys_get_config()->connect_delay = 1000;
}
上面的代码是 C 的 func() 函数的主体,到达时会产生分段错误。段错误仅在gdb 之外运行时发生。
为什么会这样?
编辑:将 sys_config_t config 设为全局变量并没有帮助。
【问题讨论】:
标签: c debugging data-structures segmentation-fault shared-libraries