【发布时间】:2014-06-15 12:51:55
【问题描述】:
我有一个用 C 语言编写的程序,它在 debian 机器中完美运行。我被要求在 CentOs 6.5 上编译和运行它。除了我尝试从配置文件中获取值的部分之外,一切都可以完美编译。代码是这样写的:
char config_file[150]="file.conf";
config_t cfg;
config_setting_t *ssl_xor_key;
char xkey[256];
ssl_xor_key = config_lookup(&cfg, "ssl.xor.key");
strcpy(xkey,config_setting_get_string(ssl_xor_key));
配置文件包含以下内容:
ssl:
{
xor:
{
key="textexttextexttextext";
};
};
当程序到达 config_setting_get_string 时,它会崩溃。我试图在 strcpy 命令中设置字符串并且它可以工作。我在 /var/log/messages 上看到了这个:
kernel: mysql-proxy[9808]: segfault at 8 ip 00007f3ba9d53d12 sp 00007f3baab8a0d8 error 4 in libconfig.so.8.0.0[7f3ba9d51000+a000]
我看到原来的 Debian 机器有 libconfig 1.4.9,而 CentO 的最新版本是 1.3.2。我不确定该版本是否支持该命令,因为我无法找到旧版本的文档。
我也尝试在 Centos Box 上编译最新版本,但我在过程中遇到错误,所以我认为它不被支持。
知道什么是解决方案吗?
【问题讨论】:
-
也许你需要先检查一下
config_lookup()的返回值,然后再盲目地将它用于其他用途。此外,cfg似乎未初始化使用,我没有看到任何实际尝试打开配置文件或任何东西的东西,尽管我承认我完全不熟悉那个特定的 API... -
谢谢。我要试试你说的。您会推荐任何替代 api 来管理配置文件的方法吗?