Mas*_*erM 9 c debugging shared-libraries segmentation-fault data-structures
我有以下结构:
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;
Run Code Online (Sandbox Code Playgroud)
我还有一个在静态库中定义的函数(让我们称之为A.lib):
sys_config_t* sys_get_config(void)
{
static sys_config_t config;
return &config;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个程序(我们称之为B)和一个动态库(我们称之为C).B和C都与A.lib链接.在运行时B打开C via dlopen(),然后func()通过调用获取C函数的地址dlsym().
void func(void)
{
sys_get_config()->connect_delay = 1000;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是C func()函数的主体,它到达时会产生分段错误.segfault仅在外面运行时发生gdb.
为什么会这样?
编辑:制作sys_config_t config全局变量没有帮助.