2015-09-17 88 views
3

我在項目中使用libconfig,並且認爲使用我的嵌套CMakeLists.txt腳本編譯其餘代碼非常方便。下面是其中libconfig源文件所在的目錄內容:libconfig:使用CMake進行編譯時出錯

[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(優勝美地)機器上:

/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); 

有沒有人有什麼,這可能是由於一個想法?

+3

1.不要忽略警告。另外,你可以使用'FILE(GLOB config_source_files $ {CMAKE_CURRENT_SOURCE_DIR}/*。c)'。 'libconfig.c'中包含'locale.h'? –

回答

1

這似乎是libconfig.c沒有看到:

#include <xlocale.h> 

這是需要的OS X版本,但不適用於Linux(見下文更完整的解釋)。

可能有一些配置選項或構建開關缺失,通常會導致此標頭包含在OS X構建中。我建議你看看libconfig.c以及其他libconfig頭文件,看看是否有#ifdef控制包含<xlocale.h>(嘗試grep「xlocale.h」)。還請檢查隨附的READMEmakefile或其他文檔。


在Linux for newlocale需要的頭和 locale_t是:

#include <locale.h> 

但OS X需要:

#include <xlocale.h> 

如有疑問,請參閱man page

NEWLOCALE(3)BSD Library Fun ctions手冊NEWLOCALE(3)

名稱 newlocale - 創建一個新的語言環境

提要 #include <xlocale.h>

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

那麼,libconfig.c是庫的源文件。將include添加到代碼中聽起來不太合適。我認爲問題可能在別的地方。 – davak

+0

@davak:這取決於這個庫是否曾經在Mac OS X上測試過,但是你是對的,也許OP缺少一些配置選項或者構建參數,包括OS X的正確頭文件 - 我將更新回答覆蓋這一點。 –

+0

那麼,我一直在使用libconfig多年,從來沒有在OS X下。但作者聲稱他們支持OS X,我不認爲不相信他們的理由。我只是看了一下源代碼,爲了包含xlocale.h,必須定義HAVE_XLOCALE_H。 – davak