2016-08-05 41 views
0

Ich habe eine einfache Konsolenanwendung in Embarcadero Berlin 10.1 erstellt, 32-Bit-Compiler commen und in etwas Code von here in the boost docs kopiert. HierVerknüpfung von boost :: locale mit Embarcadero Berlin 10.1

ist der vollständige Code

#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; 
} 

Aber ich habe einige Linkerfehler:

[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 

Die ersten beiden, die ich manuell beheben kann durch Zugabe von libboost_locale-bcb32c-MT-SD-1_55.lib zu dem Projekt, es ist mein Verständnis und Erfahrung mit Boost, dass es nicht wirklich manuell verknüpfen müssen, aber das macht mir nichts aus. Die letzten 4 bin ich mir aber überhaupt nicht sicher. Es scheint mit dem Gebietsschema Backend in Verbindung zu stehen (Ist es nicht ICU mit Embarcadero Boost?)

Hat jemand einen Rat?

+0

http://icu-project.org/download/4.0.html hat einige Fenster Quellen auch, besteht eine hohe Wahrscheinlichkeit, dass Sie es für sich selbst kompilieren müssen. – fritzone

+0

Es sollte noch in der Lage sein, das winapi-Backend zu verwenden – andyc

Antwort

1

Ihr Problem ist sehr interessant für mich. Also habe ich ein neues Projekt erstellt und deinen Code hineinkopiert und das Problem hat sich wirklich wiederholt.
Nach einigen Recherchen konnte ich dieses Problem nur durch Hinzufügen von collate.cpp und converter.cpp und numeric.cpp in $(BDSINCLUDE)\boost_1_55\libs\locale\src\win32 in meinem Projekt beheben. Ich musste auch #pragma link "libboost_system-bcb32c-mt-sd-1_55.lib" in meinem Quellcode vor der main Funktion hinzufügen.

Sam

+0

Leider funktioniert das nicht – andyc

+0

Ich habe die Antwort geändert. Ich habe das getestet und es funktioniert. – Sam

+0

Vielen Dank! Ich hatte nach der Implementierung dieser Funktionen gesucht, aber nicht gedacht, in "include" zu schauen ... Ich werde mich das für das nächste Mal merken. – andyc