Связывание boost :: locale с Embarcadero Berlin 10.1

Я создал простое консольное приложение в Embarcadero Berlin 10.1, выбрал 32-битный компилятор clang и скопировал некоторый код из здесь, в буст-документах.

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

#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 вручную в проект, это мое понимание и опыт работы с boost, что в действительности не нужно вручную устанавливать ссылки, но я не против этого. Последние 4, однако, я не совсем уверен. Похоже, это связано с языковым бэкэндом (разве это не ICU с усилением Embarcadero?)

У кого-нибудь есть совет?

0

Решение

Ваша проблема мне очень интересна. Поэтому я создал новый проект, скопировал в него ваш код и, конечно же, проблема повторилась.
После некоторых исследований я смог преодолеть эту проблему, добавив 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 функция.

Сэм

1

Другие решения

Других решений пока нет …