1

libconfigで動作するアプリを作成しようとしています。だから私はコードの次の部分を持っています:

#include <stdio.h>
#include <stdlib.h>
#include <libconfig.h>


int main(int argc, char **argv)
{
    if(argc > 1)
    {
        char *config_file_path = argv[1];
        config_t cfg;

        config_init(&cfg);
        printf("loading config: %s...\n", config_file_path);

        if (!config_read_file(&cfg, config_file_path))
        {
            fprintf(stderr, "%s:%d - %s\n", config_file_path,
                config_error_line(&cfg), config_error_text(&cfg));
            config_destroy(&cfg);
            exit(EXIT_FAILURE);
        }

        long int port_number;
        config_lookup_int(&cfg, "server_app.port", &port_number); 

        printf("port: %ld\n", port_number);

        config_destroy(&cfg);
    }
    else
    {
        fprintf(stderr, "Wrong number of arguments. Usage: %s <cfg_file>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    return EXIT_SUCCESS;
}

そしてそのための設定ファイル:

サーバー.cfg

server_app:
{
    port = 9034;
    mail_queue_dir = "mail_queue";

@include "quote.cfg"

    logs:
    {
        error_log = "logs/error.log";
    };

    connection_address = "127.0.0.1";
    max_worker_number = 10;
    number_of_pending_connections = 10;
};

見積もり.cfg

# file: quote.cfg
quote = "dsf";

コンパイル後、params に server.cfg を指定して main() を実行しようとしましたが、@include の行で常に「構文エラー」が発生します。何か案は?

4

2 に答える 2

1

私はあなたの設定を試してみましたがlibconfig-1.4.9、うまくいきます:

./cfg server.cfg 
loading config: server.cfg...
port: 9034

この変更ログ@includeから判断すると、解析にバグがある古いバージョンを使用しているようです。libconfig-1.4.3 以降にアップグレードする必要があります。

----- バージョン 1.4.3 ------

2010-02-13 Mark Lindner * lib/scanner.l - @include と先行する空白を一致させるためのバグ修正

.

于 2012-11-25T14:29:19.060 に答える
0
@include "quote.cfg"

する必要があります

#include "quote.cfg"

@includeC 構文の一部ではありません。

于 2012-11-25T13:28:33.230 に答える