通过返回的指针访问函数静态结构时出现分段错误

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全局变量没有帮助.

Mas*_*erM 1

解决方案很简单。不知何故,由于标头不匹配,B 和 C 编译单元中的 PATH_MAX 常量的定义不同。我以后需要更加小心。(捂脸