libconfig: 使用 CMake 编译时出错

libconfig: error when compiling using CMake

我在一个项目中使用 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);

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

看来 libconfig.c 没有看到:

#include <xlocale.h>

OS X 构建需要,但 Linux 不需要(请参阅下面更完整的解释)。

可能缺少某些配置选项或构建开关,通常会导致此 header 包含在 OS X 构建中。我建议你看看 libconfig.c 和其他 libconfig headers 看看是否有一个 #ifdef 控制 <xlocale.h> 的包含(尝试 grepping "xlocale.h").还要检查任何随附的 READMEmakefile 或其他文档。


在 Linux 上,newlocalelocale_t 所需的 header 是:

#include <locale.h>

但 OS X 要求:

#include <xlocale.h>

如有疑问,请参阅 man page:

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

NAME newlocale -- Create a new locale

SYNOPSIS #include <xlocale.h>

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