libconfig:使用CMake编译时出错

时间:2015-09-17 07:54:02

标签: c macos cmake libconfig

我在项目中使用libconfig,并且使用我的嵌套CMakeLists.txt脚本可以方便地使用其余代码编译它。以下是libconfig源文件所在目录的内容:

[config] -> ls
CMakeLists.txt  libconfig.c       libconfig.h++  scanctx.h  strbuf.c
grammar.c       libconfigcpp.c++  libconfig.hh   scanner.c  strbuf.h
grammar.h       libconfigcpp.cc   parsectx.h     scanner.h  wincompat.h
grammar.y       libconfig.h       scanctx.c      scanner.l

以下是CMakeLists.txt的内容:

set(config_source_files
    grammar.c
    libconfig.c
    libconfigcpp.c++
    scanctx.c
    scanner.c
    strbuf.c
)
add_library(config ${config_source_files})

当我在我的Linux(Fedora 20)机器上编译时,我收到一些警告。在我的OSX(Yosemite)机器上编译时出错:

/Users/m4urice/myproject/src/utilities/config/libconfig.c:90:3: error: 
    use of undeclared identifier 'locale_t'
locale_t loc = newlocale(LC_NUMERIC_MASK, "C", NULL);

有没有人知道这可能是什么原因?

1 个答案:

答案 0 :(得分:1)

似乎libconfig.c没有看到:

#include <xlocale.h>

这是OS X版本所必需的,但不适用于Linux(请参阅下面的更全面的解释)。

您可能缺少一些配置选项或构建开关,这通常会导致此标头包含在OS X版本中。我建议您查看libconfig.c以及其他libconfig标头,看看是否有#ifdef来控制<xlocale.h>的加入(尝试使用&#34; xlocale.h&#34)。另请查看随附的READMEmakefile或其他文档。

<小时/> 在Linux上,newlocalelocale_t所需的标题是:

#include <locale.h>

但OS X要求:

#include <xlocale.h>

如有疑问,请参阅man page

  

NEWLOCALE(3)BSD Library Functions Manual NEWLOCALE(3)

     

NAME       newlocale - 创建新的区域设置

     

概要       #include <xlocale.h>

locale_t
newlocale(int mask, const char * locale, locale_t base);