
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*