简体   繁体   中英

How to use Boost C++ Libraries on MacOS

I am trying to use Boost Libraries on MacOS.

I installed boost using brew install boost . This installed boost in usr/local/Cellar/boost .

I compiled 2 programs with the same command g++ --std=c++11 main.cpp -o main and then ./main

However the first one compiled successfully while the second one doesn't. What should I do?

Program1.

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;

    std::for_each(
        in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

Program2.

#include <boost/test/unit_test.hpp>

int add( int i, int j ) { return i+j; }

BOOST_AUTO_TEST_CASE( my_test )
{
    BOOST_CHECK( add( 2,2 ) == 4 );       

    BOOST_REQUIRE( add( 2,2 ) == 4 );     

    if( add( 2,2 ) != 4 )
      BOOST_ERROR( "Ouch..." );      

    if( add( 2,2 ) != 4 )
      BOOST_FAIL( "Ouch..." );           

    if( add( 2,2 ) != 4 ) throw "Ouch..."; 

    BOOST_CHECK_MESSAGE( add( 2,2 ) == 4, 
                         "add(..) result: " << add( 2,2 ) );

    BOOST_CHECK_EQUAL( add( 2,2 ), 4 );  
}

I get the following error when I compile program 2.

Undefined symbols for architecture x86_64:
  "boost::test_tools::tt_detail::report_assertion(boost::test_tools::assertion_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstr
ing<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)", referenced from:
      my_test::test_method() in del-9b4dcb.o

      bool boost::test_tools::tt_detail::check_frwd<boost::test_tools::tt_detail::equal_impl_frwd, int, int>(boost::test_tools::tt_detail::equal_impl_frwd, boost
::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_det
ail::check_type, int const&, char const*, int const&, char const*) in del-9b4dcb.o
  "boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)", r
eferenced from:
      my_test_invoker() in del-9b4dcb.o
      my_test::test_method() in del-9b4dcb.o
  "boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::functio
n<void ()> const&)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>,
 unsigned long) in del-9b4dcb.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, boost::unit_test::decorator::collector&, unsigne
d long)", referenced from:
      ___cxx_global_var_init.1 in del-9b4dcb.o
  "boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>,
 unsigned long) in del-9b4dcb.o
  "vtable for boost::unit_test::unit_test_log_t", referenced from:
      boost::unit_test::unit_test_log_t::unit_test_log_t() in del-9b4dcb.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

查看boost的文档,您可能需要尝试以下include语句。

#include <boost/test/included/unit_test.hpp>

Linker errors happen when the compiler fails to find required library binaries. You need to specify the path to the boost test library. The thing is where your boost libraries are - probably not /usr/local/lib , but /usr/local/Cellar/boost/.../lib on Mac.

So use something like

g++ -L/usr/local/Cellar/boost/.../lib main.cpp -o main -lboost_unit_test_framework

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM