> On Dec 24, 2014, at 1:52 AM, Jesse Alama <jesseal...@fastmail.fm> wrote:
> 
> I'm working on updating a package of mine (ledger) that uses the boost C++ 
> suite (I'm using boost1.53.python27) as well as libicu48.  I'm having some 
> trouble with the build and can't quite tell where the problem lies.  Consider 
> this minature C++ program badboost.cpp (which occurs as one of the programs 
> during the config stage of ledger):
> 
> #include <boost/regex/icu.hpp>
> 
> using namespace boost;
> 
> int main() {
>  std::string text = "Активы";
>  u32regex r = make_u32regex("активы", regex::perl | regex::icase);
>  return u32regex_search(text, r) ? 0 : 1;
> }
> 
> When compiling this, I get a linking error:
> 
> In file included from badboost.cpp:1:
> In file included from /sw/include/boost/regex/icu.hpp:25:
> In file included from /sw/include/boost/regex.hpp:31:
> In file included from /sw/include/boost/regex/v4/regex.hpp:32:
> In file included from /sw/include/boost/regex/v4/regex_workaround.hpp:43:
> In file included from /sw/include/boost/shared_ptr.hpp:17:
> /sw/include/boost/smart_ptr/shared_ptr.hpp:491:41: warning: rvalue references 
> are a C++11 extension [-Wc++11-extensions]
>    shared_ptr( std::unique_ptr< Y, D > && r ): px( r.get() ), pn()
>                                        ^
> /sw/include/boost/smart_ptr/shared_ptr.hpp:556:51: warning: rvalue references 
> are a C++11 extension [-Wc++11-extensions]
>    shared_ptr & operator=( std::unique_ptr<Y, D> && r )
>                                                  ^
> /sw/include/boost/smart_ptr/shared_ptr.hpp:558:55: warning: rvalue references 
> are a C++11 extension [-Wc++11-extensions]
>        this_type( static_cast< std::unique_ptr<Y, D> && >( r ) ).swap(*this);
>                                                      ^
> 3 warnings generated.
> Undefined symbols for architecture x86_64:
>  "boost::basic_regex<int, boost::icu_regex_traits>::do_assign(int const*, int 
> const*, unsigned int)", referenced from:
>      boost::basic_regex<int, boost::icu_regex_traits>::assign(int const*, int 
> const*, unsigned int) in badboost-2044fe.o
>  "boost::re_detail::get_mem_block()", referenced from:
>      
> boost::re_detail::save_state_init::save_state_init(boost::re_detail::saved_state**,
>  boost::re_detail::saved_state**) in badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::extend_stack() in 
> badboost-2044fe.o
>  "boost::re_detail::put_mem_block(void*)", referenced from:
>      boost::re_detail::save_state_init::~save_state_init() in 
> badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::unwind_extra_block(bool) in 
> badboost-2044fe.o
>  "boost::re_detail::verify_options(unsigned int, 
> boost::regex_constants::_match_flags)", referenced from:
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::find_imp() in badboost-2044fe.o
>  "boost::re_detail::raise_runtime_error(std::runtime_error const&)", 
> referenced from:
>      void 
> boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::icu_regex_traits>
>  >(boost::regex_traits_wrapper<boost::icu_regex_traits> const&, 
> boost::regex_constants::error_type) in badboost-2044fe.o
>  
> "boost::re_detail::get_default_error_string(boost::regex_constants::error_type)",
>  referenced from:
>      
> boost::icu_regex_traits::error_string(boost::regex_constants::error_type) 
> const in badboost-2044fe.o
>  "boost::re_detail::is_combining_implementation(unsigned short)", referenced 
> from:
>      bool boost::re_detail::is_combining<int>(int) in badboost-2044fe.o
>  "boost::icu_regex_traits::isctype(int, unsigned long long) const", 
> referenced from:
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::find_restart_word() in 
> badboost-2044fe.o
>      boost::u8_to_u32_iterator<std::__1::__wrap_iter<char const*>, int> 
> boost::re_detail::re_is_set_member<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, int, boost::icu_regex_traits, unsigned long 
> long>(boost::u8_to_u32_iterator<std::__1::__wrap_iter<char const*>, int>, 
> boost::u8_to_u32_iterator<std::__1::__wrap_iter<char const*>, int>, 
> boost::re_detail::re_set_long<unsigned long long> const*, 
> boost::re_detail::regex_data<int, boost::icu_regex_traits> const&, bool) in 
> badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::match_word_boundary() in 
> badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::match_within_word() in 
> badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::match_word_start() in 
> badboost-2044fe.o
>      
> boost::re_detail::perl_matcher<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int>, 
> std::__1::allocator<boost::sub_match<boost::u8_to_u32_iterator<std::__1::__wrap_iter<char
>  const*>, int> > >, boost::icu_regex_traits>::match_word_end() in 
> badboost-2044fe.o
>  "boost::re_detail::icu_regex_traits_implementation::do_transform(int const*, 
> int const*, icu_48::Collator const*) const", referenced from:
>      boost::re_detail::icu_regex_traits_implementation::transform_primary(int 
> const*, int const*) const in badboost-2044fe.o
>      boost::re_detail::icu_regex_traits_implementation::transform(int const*, 
> int const*) const in badboost-2044fe.o
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see 
> invocation)
> 
> Is there some kind of binary incompatibility problem here?
> 
> Jesse

While most of boost is just header files, there are some actual libraries that 
are needed for some things and regex is one of them. Try adding 
-lboost_regex-mt to the link command.

Daniel


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to