c++ files to include for boost : asio

2019-09-05 08:51发布

问题:

I'm following this tutorial however it does not state which libaries I need to include in order to get boost to work,current options for links are:

-I/usr/include/opencv2 -I/usr/include/boost_1_55_0 -I/usr/include/boost_1_55_0/boost -O0 -g3 -Wall -c -fmessage-length=0

however this returns the following erro:

which states that it can't find asio, am I doing something wrong or was assio the wrong library to link to? Or is there any other way to find out. Note that this is my 2nd c++ project(through I have a lot of java experience) and first with the heavy use of libraries so details are somewhat required.

Removing boost/asio gave me the following errors:

make all 
Building target: DisplayImage
Invoking: GCC C++ Linker
g++ -L/usr/include/opencv2 -L/usr/include/boost_1_55_0/boost -L/usr/include/boost_1_55_0 -L/usr/include/opencv2 -L/usr/lib -o "DisplayImage"  ./src/Cap.o ./src/DisplayImage.o ./src/Filters.o ./src/sender.o   -lopencv_imgproc -lopencv_highgui -lopencv_core
./src/sender.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost_1_55_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
/usr/include/boost_1_55_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::generic_category()'
/usr/include/boost_1_55_0/boost/system/error_code.hpp:224: undefined reference to `boost::system::system_category()'
./src/sender.o: In function `error_code':
/usr/include/boost_1_55_0/boost/system/error_code.hpp:323: undefined reference to `boost::system::system_category()'
./src/sender.o: In function `boost::asio::error::get_system_category()':
/usr/include/boost_1_55_0/boost/asio/error.hpp:224: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [DisplayImage] Error 1

Build Finished **

I use an ubuntu (x64) laptop if it matters.

回答1:

Most of boost is implemented in what's called "header-only" code. Through the generous use of C++ templates, there is no actual library code to which your code needs to link. However, there are, as you've seen some actual libraries as well. Generally, the help you seek is probably here: http://www.boost.org/doc/libs/1_55_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library

Your particular program uses the timer and system libraries and so you can probably use this command line to link your program:

g++ timer.cpp -o timer -lboost_timer -lboost_system


回答2:

You can look at the bjam in boost/libs/asio/example/cpp03/tutorial/Jamfile.v2:

project
: requirements
    <library>/boost/system//boost_system
    <library>/boost/thread//boost_thread
    <define>BOOST_ALL_NO_LIB=1
    <threading>multi
    <os>SOLARIS:<library>socket
    <os>SOLARIS:<library>nsl
    <os>NT:<define>_WIN32_WINNT=0x0501
    <os>NT,<toolset>gcc:<library>ws2_32
    <os>NT,<toolset>gcc:<library>mswsock
    <os>NT,<toolset>gcc-cygwin:<define>__USE_W32_SOCKETS
    <os>HPUX,<toolset>gcc:<define>_XOPEN_SOURCE_EXTENDED
    <os>HPUX:<library>ipv6
;

You can see that they build all the tutorial steps with

-lboost_system -lboost_thread -DBOOST_ALL_NO_LIB=1

on linux