Re: [Boost-users] [Boost.Asio] tutorial #1 code does not compile (g++)

Hi Richard, I suspect you and David are both correct; I need to link boost_chrono. I found here https://www.boost.org/doc/libs/1_72_0/doc/html/chrono/users_guide.html "If BOOST_CHRONO_HEADER_ONLY <https://www.boost.org/doc/libs/1_72_0/doc/html/chrono/reference.html#chrono.reference.cpp0x.chrono_chrono_hpp.conf.header_only> is not defined you need to compile it and build the library before use". This aligns with what you are saying. However, the command it mentions to use,
bjam libs/chrono/build
does not work, even when I am in the boost directory (bjam is not defined). In addition, adding -lboost_chrono or -L{BOOST_ROOT} does not help my case. After reading this article about static and dynamic linked libraries https://medium.com/@dkwok94/the-linking-process-exposed-static-vs-dynamic-li... I suspect I must append the path of boost_chrono to my LD_LIBRARY_PATH variable. Am I correct in this thinking? If so, where the heck is boost_chrono located? I could not find a .a or .so file in libs/chrono/ anywhere. Do I need to build the static/dynamic library myself? Please advise. I apologize for the elementary questions; my compiler and Unix knowledge could be way better, which is something I am working on. Thanks *Andrew J. E. McFarlane* *Cell: (236) 888-1376* On Tue, Jan 28, 2020 at 11:33 PM <boost-users-request@lists.boost.org> wrote:
Send Boost-users mailing list submissions to boost-users@lists.boost.org
To subscribe or unsubscribe via the World Wide Web, visit https://lists.boost.org/mailman/listinfo.cgi/boost-users or, via email, send a message with subject or body 'help' to boost-users-request@lists.boost.org
You can reach the person managing the list at boost-users-owner@lists.boost.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Boost-users digest..."
Today's Topics:
1. [Boost.Asio] tutorial #1 code does not compile (g++) (Andrew McFarlane) 2. Re: [Boost.Asio] tutorial #1 code does not compile (g++) (Vinnie Falco) 3. Re: [Boost.Asio] tutorial #1 code does not compile (g++) (Andrew McFarlane) 4. Re: [Boost.Asio] tutorial #1 code does not compile (g++) (Richard Hodges)
----------------------------------------------------------------------
Message: 1 Date: Tue, 28 Jan 2020 17:14:58 -0800 From: Andrew McFarlane <andrew.mcfarlane52@gmail.com> To: boost-users@lists.boost.org Subject: [Boost-users] [Boost.Asio] tutorial #1 code does not compile (g++) Message-ID: <CAG90r9SPGR= wRUykmftmxTM6oUKbTZYoyat_BR9ufaNpQ0g4Rw@mail.gmail.com> Content-Type: text/plain; charset="utf-8"
Hi All,
I am attempting to get acquainted with C++ multithreaded network programming. I have a background in such topics within Java but considering how different C++ is, I am starting from ground zero.
I have copied the code from tutorial #1 into my IDE, Timer.1: Using a timer synchronously:
https://www.boost.org/doc/libs/1_72_0/doc/html/boost_asio/tutorial/tuttimer1... (follow the link for code).
When I tried to compile this (using g++) with the following command:
g++ -v -I${BOOST_ROOT} -I. -o main main.cpp (BOOST_ROOT is where I have boost installed), I get the following output:
Undefined symbols for architecture x86_64:
"boost::chrono::steady_clock::now()", referenced from:
boost::asio::detail::chrono_time_traits<boost::chrono::steady_clock, boost::asio::wait_traits<boost::chrono::steady_clock> >::now() in main-c86634.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation) Note this is the non-verbose output (I would rather not post the verbose output, as I am trying to keep this post short).
I did some digging of my own on Boost's steady_timer documentation and tried to follow that style, as you can find here:
https://www.boost.org/doc/libs/1_72_0/doc/html/boost_asio/reference/steady_t... In other words, I replace the two-parameter boost::asio::steady_timer ctor call with a single-parameter ctor call in which I pass an io_context, followed by t.expires_after(std::chrono::seconds(5));
This generated another compiler error, this one to do with 'no viable conversion'. See here:
main.cpp:10:21: error: no viable conversion from 'std::chrono::seconds' (aka
'duration<long long>') to 'const
boost::asio::basic_waitable_timer<boost::chrono::steady_clock,
boost::asio::wait_traits<boost::chrono::steady_clock>,
boost::asio::executor>::duration' (aka 'const duration<long long,
ratio<(1L), (1000000000L)> >')
t.expires_after(std::chrono::seconds(5)); Again, there is more output that I have omitted for brevity. If anyone would like to see the rest of the output, I will gladly supply it.
The bottom line is I am not sure what the problem is, or why I am having to debug tutorial code in the first place. This should be relatively simple to "plug & play", should it not? Does this have to do with my compiler? BTW, I am running Mac OS X.
Thanks in advance for the help.
Sincerely,
*AJ*

On 30/01/2020 07:49, Andrew McFarlane wrote:
I suspect you and David are both correct; I need to link boost_chrono. [...] In addition, adding -lboost_chrono or -L{BOOST_ROOT} does not help my case. After reading this article about static and dynamic linked libraries https://medium.com/@dkwok94/the-linking-process-exposed-static-vs-dynamic-li... I suspect I must append the path of boost_chrono to my LD_LIBRARY_PATH variable. Am I correct in this thinking? If so, where the heck is boost_chrono located? I could not find a .a or .so file in libs/chrono/ anywhere. Do I need to build the static/dynamic library myself? Please advise.
https://www.boost.org/doc/libs/1_72_0/more/getting_started/unix-variants.htm... Note that unless you need something from the latest Boost, you can also install the corresponding dev packages (via your standard package manager) to use your system's Boost version instead, just like any other library packaged by your distro. This will save you some time.
participants (2)
-
Andrew McFarlane
-
Gavin Lambert