2015-09-17 3 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 (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); 

Кто-нибудь есть идея о том, что это может быть из-за?

+3

1. Не игнорируйте предупреждения. 2. Также вы можете использовать 'FILE (GLOB config_source_files $ {CMAKE_CURRENT_SOURCE_DIR}/*. C)'. Является ли 'locale.h' включенным в' libconfig.c'? –

ответ

1

Казалось бы, что libconfig.c не видит:

#include <xlocale.h> 

, который требуется для OS X строит, но не для Linux (см более полное объяснение ниже).

Возможно, есть какой-либо параметр конфигурации или встроенный коммутатор, который вам не хватает, что обычно приводит к включению этого заголовка в сборки OS X. Я предлагаю вам взглянуть на libconfig.c и, возможно, на другие заголовки libconfig, чтобы узнать, есть ли #ifdef, который контролирует включение <xlocale.h> (попробуйте grepping для «xlocale.h»). Также проверьте любые сопровождающие README, makefile или другую документацию.


В Linux требуемый заголовок для newlocale и locale_t является:

#include <locale.h> 

но OS X требует:

#include <xlocale.h> 

Если вы сомневаетесь, смотрите man page:

NEWLOCALE (3) Библиотека BSD Fun ctions Руководство NEWLOCALE (3)

ИМЯ newlocale - Создание новой локализованной

СИНТАКСИС #include <xlocale.h>

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

Ну, libconfig.c является исходным файлом библиотеки. Нехорошо добавлять дополнения в свой код. Я думаю, что, вероятно, проблема в другом месте. – davak

+0

@ davak: это зависит от того, была ли эта библиотека когда-либо протестирована в Mac OS X, но вы правы, возможно, в OP отсутствует какой-либо параметр конфигурации или параметр сборки, который будет включать правый заголовок для OS X - я обновлю ответьте на это. –

+0

Ну, я использовал libconfig годами, но никогда не был под OS X. Но авторы утверждают, что они поддерживают OS X, и я не вижу причин не верить им. Я просто взглянул на источник и для того, чтобы включить xlocale.h, должен быть определен HAVE_XLOCALE_H. – davak

Смежные вопросы