【问题标题】:old libconfig version support of config_setting_get_string旧的 libconfig 版本支持 config_setting_get_string
【发布时间】: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 来管理配置文件的方法吗?

标签: c linux libconfig


【解决方案1】:

看起来旧版本的 libconfig 对配置文件中的 sintax 错误更敏感。我错过了决赛;文件上。现在可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多