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").还要检查任何随附的 README
、makefile
或其他文档。
在 Linux 上,newlocale
和 locale_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);
我在一个项目中使用 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").还要检查任何随附的 README
、makefile
或其他文档。
在 Linux 上,
newlocale
和 locale_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);