2016-08-05 2 views
0

Я создал простое консольное приложение в Embarcadero Berlin 10.1, выбрал 32-битный компилятор clang и скопировал его в некоторый код от here in the boost docs.Ссылка на boost :: locale с Embarcadero Berlin 10.1

Вот полный код

#pragma hdrstop 
#pragma argsused 

#ifdef _WIN32 
#include <tchar.h> 
#else 
    typedef char _TCHAR; 
    #define _tmain main 
#endif 

#include <stdio.h> 

#include <boost/locale.hpp> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    using namespace boost::locale; 
    using namespace std; 
    generator gen; 
    locale loc=gen(""); 
    // Create system default locale 

    locale::global(loc); 
    // Make it system global 

    cout.imbue(loc); 
    // Set as default locale for output 

    cout <<format("Today {1,date} at {1,time} we had run our first localization example") % time(0) 
     <<endl; 

    cout<<"This is how we show numbers in this locale "<<as::number << 103.34 <<endl; 
    cout<<"This is how we show currency in this locale "<<as::currency << 103.34 <<endl; 
    cout<<"This is typical date in the locale "<<as::date << std::time(0) <<endl; 
    cout<<"This is typical time in the locale "<<as::time << std::time(0) <<endl; 
    cout<<"This is upper case "<<to_upper("Hello World!")<<endl; 
    cout<<"This is lower case "<<to_lower("Hello World!")<<endl; 
    cout<<"This is title case "<<to_title("Hello World!")<<endl; 
    cout<<"This is fold case "<<fold_case("Hello World!")<<endl; 

    return 0; 
} 

Но я получаю некоторые ошибки компоновщика:

[ilink32 Error] Error: Unresolved external 'boost::system::generic_category()' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|generator 
[ilink32 Error] Error: Unresolved external 'boost::system::system_category()' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|generator 
[ilink32 Error] Error: Unresolved external 'boost::locale::impl_win::create_convert(std::locale&, boost::locale::impl_win::winlocale&, unsigned int)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|win_backend 
[ilink32 Error] Error: Unresolved external 'boost::locale::impl_win::create_collate(std::locale&, boost::locale::impl_win::winlocale&, unsigned int)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|win_backend 
[ilink32 Error] Error: Unresolved external 'boost::locale::impl_win::create_formatting(std::locale&, boost::locale::impl_win::winlocale&, unsigned int)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|win_backend 
[ilink32 Error] Error: Unresolved external 'boost::locale::impl_win::create_parsing(std::locale&, boost::locale::impl_win::winlocale&, unsigned int)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\18.0\LIB\WIN32C\RELEASE\LIBBOOST_LOCALE-BCB32C-MT-SD-1_55.LIB|win_backend 

Первые два я могу исправить вручную путем добавления libboost_locale-bcb32c-MT-SD-1_55.lib к проекту, это мое понимание и опыт с повышением, что ему не нужно вручную связывать, но я не против этого. Последние 4, однако, я совсем не уверен. Похоже, что это связано с локальным бэкэндом (разве это не ICU с поддержкой Embarcadero?)

Есть ли у кого-нибудь советы?

+0

http://icu-project.org/download/4.0.html имеет некоторые источники окон также, существует высокая вероятность того, что вам нужно будет скомпилировать его для себя. – fritzone

+0

Он все равно должен использовать бэкэнд winapi – andyc

ответ

1

Ваша проблема очень интересна для меня. Поэтому я создал новый проект и скопировал в него свой код, и, конечно же, проблема повторилась.
После ряда исследований единственным способом преодолеть эту проблему явилось добавление collate.cpp и converter.cpp и numeric.cpp, расположенное в $(BDSINCLUDE)\boost_1_55\libs\locale\src\win32 в мой проект. Мне также пришлось добавить #pragma link "libboost_system-bcb32c-mt-sd-1_55.lib" в мой исходный код до функции main.

Сэм

+0

К сожалению, это не работает – andyc

+0

Я изменил ответ. Я тестировал это, и он работает. – Sam

+0

Большое вам спасибо! Я искал реализацию этих функций, но не думал заглянуть в «включить» ... Я запомню это в следующий раз. – andyc