Re: [Cppcms-users] Boost locale with icu backend static linking.
Brought to you by:
artyom-beilis
From: Stanimir M. <sta...@zo...> - 2012-08-07 15:35:53
|
I knew that i am doing something wrong, but after I read some explanations for linking with static and dynamic libraries, and after several reordering was not able to do it. Thank you for this help and for the additional good tips for linking. Stanimir On Tue, Aug 7, 2012 at 5:40 PM, Artyom Beilis <art...@ya...> wrote: > Hello, > > > You are linking not correctly: > > a) You forget to link with ICU > b) You use incorrect link order > c) You forget to return to dynamic linking (in generally it is better to provide path to *.a files) > d) Don't forget order. > > -lboost_locale -lboost_thread > > Not the other way around as boost locale uses boost thread > > > This is how should you links (in the example there is a stage build) > > > This is the simplest way: > ------------------------ > > > The simplest way (full path), locale static, icu dynamic > > > g++ -O2 test.cpp -I /home/artik/Packages/boost/boost_1_49_0 /home/artik/Packages/boost/boost_1_49_0/stage/lib/libboost_locale.a /home/artik/Packages/boost/boost_1_49_0/stage/lib/libboost_thread.a -lpthread -licuuc -licui18n > > > > Boost-Locale Static and ICU Dynamic > > g++ -O2 test.cpp -I /home/artik/Packages/boost/boost_1_49_0 -L /home/artik/Packages/boost/boost_1_49_0/stage/lib/ -Wl,-Bstatic -lboost_locale -lboost_thread -Wl,-Bdynamic -lpthread -licuuc -licui18n > > > > Boost-Locale and ICU Static > > > g++ -O2 test.cpp -I /home/artik/Packages/boost/boost_1_49_0 -L /home/artik/Packages/boost/boost_1_49_0/stage/lib/ -Wl,-Bstatic -lboost_locale -lboost_thread -licui18n -licuuc -licudata -Wl,-Bdynamic -lpthread -ldl > > > Probably with more resent versions you'll need -lboost_system AFTER boost_thread > > Also such a question should go to boost mailing list :-) > > > > > Artyom Beilis > -------------- > CppCMS - C++ Web Framework: http://cppcms.com/ > CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/ > > > > ----- Original Message ----- >> From: Stanimir Mladenov <sta...@zo...> >> To: Artyom Beilis <art...@ya...>; cpp...@li... >> Cc: >> Sent: Tuesday, August 7, 2012 5:11 PM >> Subject: Re: [Cppcms-users] Boost locale with icu backend static linking. >> >> After i made a simple example for linking with boost_locale statically >> and building it on a clean machine the problems still exists. >> It could be something with the link order or something else, that i >> just can't see. >> >> Here are some info for my environment: >> Ubuntu 12.04 server x86_64 >> g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 - installed from the repository >> boost 1.49 - compiled from source and installed >> >> $ locale >> LANG=en_US.UTF-8 >> LANGUAGE= >> LC_CTYPE="en_US.UTF-8" >> LC_NUMERIC="en_US.UTF-8" >> LC_TIME="en_US.UTF-8" >> LC_COLLATE="en_US.UTF-8" >> LC_MONETARY="en_US.UTF-8" >> LC_MESSAGES="en_US.UTF-8" >> LC_PAPER="en_US.UTF-8" >> LC_NAME="en_US.UTF-8" >> LC_ADDRESS="en_US.UTF-8" >> LC_TELEPHONE="en_US.UTF-8" >> LC_MEASUREMENT="en_US.UTF-8" >> LC_IDENTIFICATION="en_US.UTF-8" >> LC_ALL= >> >> Here is the example that fails to compile: >> >> #include <boost/locale.hpp> >> #include <boost/locale/date_time.hpp> >> #include <boost/locale/info.hpp> >> #include <boost/locale/localization_backend.hpp> >> >> #include <string> >> >> int main(int argc, char* argv[]) >> { >> using namespace boost::locale; >> generator gen; >> std::locale l = gen("bg_BG.UTF-8"); >> std::locale::global(l); >> std::cout.imbue(l); >> boost::locale::date_time date = boost::locale::date_time(); >> std::cout << "info: " << >> std::use_facet<boost::locale::info>(l).country() << std::endl; >> std::cout << boost::locale::as::date << date << std::endl; >> } >> >> The expected output must be: >> >> info: BG >> 07.08.2012 >> >> Compiling with the following command line for dynamic linking works: >> g++ main.cpp -o test -lboost_filesystem -lboost_thread -lboost_system >> -lboost_locale -Wl,-Bdynamic >> >> The problematic link for static is: >> $ g++ -Wl,-Bstatic -lboost_system -lboost_filesystem -lboost_locale >> -static main.cpp -o test >> >> Here is the output of the command line for static: >> >> /tmp/ccosf6nV.o: In function `main': >> main.cpp:(.text+0x21): undefined reference to >> `boost::locale::generator::generator()' >> main.cpp:(.text+0xbd): undefined reference to >> `boost::locale::date_time::date_time()' >> main.cpp:(.text+0x149): undefined reference to >> `boost::locale::date_time::~date_time()' >> main.cpp:(.text+0x161): undefined reference to >> `boost::locale::generator::~generator()' >> main.cpp:(.text+0x1c3): undefined reference to >> `boost::locale::date_time::~date_time()' >> main.cpp:(.text+0x1e0): undefined reference to >> `boost::locale::generator::~generator()' >> /tmp/ccosf6nV.o: In function `boost::locale::as::date(std::ios_base&)': >> main.cpp:(.text._ZN5boost6locale2as4dateERSt8ios_base[boost::locale::as::date(std::ios_base&)]+0x14): >> undefined reference to `boost::locale::ios_info::get(std::ios_base&)' >> main.cpp:(.text._ZN5boost6locale2as4dateERSt8ios_base[boost::locale::as::date(std::ios_base&)]+0x21): >> undefined reference to >> `boost::locale::ios_info::display_flags(unsigned long)' >> /tmp/ccosf6nV.o: In function >> `boost::locale::generator::operator()(std::basic_string<char, >> std::char_traits<char>, std::allocator<char> > const&) >> const': >> main.cpp:(.text._ZNK5boost6locale9generatorclERKSs[boost::locale::generator::operator()(std::basic_string<char, >> std::char_traits<char>, std::allocator<char> > const&) >> const]+0x27): >> undefined reference to >> `boost::locale::generator::generate(std::basic_string<char, >> std::char_traits<char>, std::allocator<char> > const&) >> const' >> /tmp/ccosf6nV.o: In function `boost::locale::info const& >> std::use_facet<boost::locale::info>(std::locale const&)': >> main.cpp:(.text._ZSt9use_facetIN5boost6locale4infoEERKT_RKSt6locale[boost::locale::info >> const& std::use_facet<boost::locale::info>(std::locale >> const&)]+0xd): >> undefined reference to `boost::locale::info::id' >> /tmp/ccosf6nV.o: In function `std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)': >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0x18): undefined reference to >> `boost::locale::date_time::time() const' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0x37): undefined reference to >> `boost::locale::ios_info::get(std::ios_base&)' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0x3f): undefined reference to >> `boost::locale::ios_info::display_flags() const' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0x8c): undefined reference to >> `boost::locale::ios_info::get(std::ios_base&)' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0x99): undefined reference to >> `boost::locale::ios_info::display_flags(unsigned long)' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0xc4): undefined reference to >> `boost::locale::ios_info::get(std::ios_base&)' >> main.cpp:(.text._ZN5boost6localelsIcEERSt13basic_ostreamIT_St11char_traitsIS3_EES7_RKNS0_9date_timeE[std::basic_ostream<char, >> std::char_traits<char> >& boost::locale::operator<< >> <char>(std::basic_ostream<char, std::char_traits<char> >&, >> boost::locale::date_time const&)]+0xd3): undefined reference to >> `boost::locale::ios_info::display_flags(unsigned long)' >> collect2: ld returned 1 exit status >> >> On Thu, Jul 19, 2012 at 11:05 AM, Stanimir Mladenov >> <sta...@zo...> wrote: >>> Sorry for bothering you! It should be my something wrong with my >>> ubuntu development machine, so i will setup a new clean one and i bet >>> the problem will disappear. If it doesn't then i will write back >>> again. >>> >>> Actually, this looks to be very common problem, i.e. messing up >>> something bad with multiple installations. That's why i am tring to do >>> everything in a new virtual machine first, before posting again for >>> help. >>> >>> On Thu, Jul 19, 2012 at 10:54 AM, Artyom Beilis <art...@ya...> >> wrote: >>>> - What exactly the error? >>>> - What symbols are missing? >>>> - How exactly do you link? >>>> >>>> Artyom Beilis >>>> -------------- >>>> CppCMS - C++ Web Framework: http://cppcms.com/ >>>> CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/ >>>> >>>> ________________________________ >>>> From: Stanimir Mladenov <sta...@zo...> >>>> To: CppCMS users group <cpp...@li...> >>>> Sent: Monday, July 16, 2012 7:10 PM >>>> Subject: [Cppcms-users] Boost locale with icu backend static linking. >>>> >>>> Boost locale with dynamic linking works just fine. When i try to link >>>> it statically i get bunch of unresolved externals. >>>> >>>> 1. I did try with plain icu api call and static linking. Works. >>>> 2. I tried a simple libboost_filesystem api call with static linking. >> Works. >>>> >>>> The only problem is when I try to link libboost_locale statically. >>>> Does someone is able to statically link it? >>>> >>>> Greetings, >>>> Stanimir >>>> >>>> >> ------------------------------------------------------------------------------ >>>> Live Security Virtual Conference >>>> Exclusive live event will cover all the ways today's security and >>>> threat landscape has changed and how IT managers can respond. >> Discussions >>>> will include endpoint security, mobile security and the latest in >> malware >>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>> _______________________________________________ >>>> Cppcms-users mailing list >>>> Cpp...@li... >>>> https://lists.sourceforge.net/lists/listinfo/cppcms-users >>>> >>>> >>>> >>>> >> ------------------------------------------------------------------------------ >>>> Live Security Virtual Conference >>>> Exclusive live event will cover all the ways today's security and >>>> threat landscape has changed and how IT managers can respond. >> Discussions >>>> will include endpoint security, mobile security and the latest in >> malware >>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>> _______________________________________________ >>>> Cppcms-users mailing list >>>> Cpp...@li... >>>> https://lists.sourceforge.net/lists/listinfo/cppcms-users >>>> >> >> ------------------------------------------------------------------------------ >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. Discussions >> will include endpoint security, mobile security and the latest in malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Cppcms-users mailing list >> Cpp...@li... >> https://lists.sourceforge.net/lists/listinfo/cppcms-users >> > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users |