2012-11-25 44 views
1

I'vm试图写的应用程序,将与libconfig工作。所以,我的代码的下一个部分:libconfig:语法错误在@include指令

#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; 
} 

和配置文件吧:

SERVER.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; 
}; 

quote.cfg

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

编译后我尝试在params中用server.cfg运行main(),但我总是在@ include的行上得到“语法错误”。有任何想法吗?

回答

1

我想你的配置与libconfig-1.4.9和它的作品:

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

你似乎使用的是旧版本,已在解析@include一个bug,这个change log来看,你应该升级到libconfig-1.4 0.3或更新版本:

-----版本1.4.3 ------

2010-02-13马克林德纳 * LIB/scanner.l - 错误修正用于与前面的空白字符

匹配@include。

+0

您如何编译C++的例子吗?我得到一个错误:“未定义的参考'libconfig :: Config :: Config()'” – andrew

0
@include "quote.cfg" 

应该是

#include "quote.cfg" 

@include不是C语法的一部分。

+0

这不是C,这是一个配置文件的格式。 – iabdalkader

+0

你是正确的 - 错误的答案 –