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>("xlocale.h" を grep してみてください)。付属READMEの 、makefile、またはその他のドキュメントも確認してください。


Linux では、newlocaleandに必要なヘッダーlocale_tは次のとおりです。

#include <locale.h>

ただし、OS X には以下が必要です。

#include <xlocale.h>

疑問がある場合は、man ページを参照してください。

NEWLOCALE(3) BSD ライブラリ関数マニュアル NEWLOCALE(3)

名前 newlocale -- 新しいロケールを作成する

あらすじ #include <xlocale.h>

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