3

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

有谁知道这可能是由于什么?

4

1 回答 1

1

似乎libconfig.c没有看到:

#include <xlocale.h>

这对于 OS X 构建是必需的,但对于 Linux 不是(请参阅下面的更完整说明)。

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


newlocale在 Linux 上, and 所需的标头locale_t是:

#include <locale.h>

但 OS X 要求:

#include <xlocale.h>

如有疑问,请参阅手册页

NEWLOCALE(3) BSD 库函数手册 NEWLOCALE(3)

NAME newlocale -- 创建一个新的语言环境

概要 #include <xlocale.h>

locale_t
newlocale(int mask, const char * locale, locale_t base);
于 2015-09-18T08:04:25.887 回答