Re: trouble with boost 1.53

Daniel Johnson <[email protected]>
Newsgroups gmane.os.apple.fink.devel
Message-ID <[email protected]>
> On Dec 24, 2014, at 1:52 AM, Jesse Alama <[email protected]> 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
[email protected]
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.