Raising error, xtime.hpp compilation problem

I am working on a C ++ project using Boost, and between compilers, I must have updated something in boost without meaning or something like that, because now Boost dependencies will not compile:

In file included from /usr/include/boost/thread/pthread/mutex.hpp:14:0, from /usr/include/boost/thread/mutex.hpp:16, from /usr/include/boost/thread/pthread/thread_data.hpp:12, from /usr/include/boost/thread/thread.hpp:17, from /usr/include/boost/thread.hpp:13, from /blah.h:4, from bluh.h:3, from bleh/main.cpp:4: /usr/include/boost/thread/xtime.hpp:23:5: error: expected identifier before numeric constant /usr/include/boost/thread/xtime.hpp:23:5: error: expected '}' before numeric constant /usr/include/boost/thread/xtime.hpp:23:5: error: expected unqualified-id before numeric constant /usr/include/boost/thread/xtime.hpp:46:14: error: expected type-specifier before 'system_time' In file included from /usr/include/boost/thread/pthread/mutex.hpp:14:0, from /usr/include/boost/thread/mutex.hpp:16, from /usr/include/boost/thread/pthread/thread_data.hpp:12, from /usr/include/boost/thread/thread.hpp:17, from /usr/include/boost/thread.hpp:13, from /blah, from /bleh,(changed these names, obviously) from /bluh /main.cpp:4: /usr/include/boost/thread/xtime.hpp: In function 'int xtime_get(xtime*, int)': /usr/include/boost/thread/xtime.hpp:73:40: error: 'get_system_time' was not declared in this scope /usr/include/boost/thread/xtime.hpp:73:40: note: suggested alternative: /usr/include/boost/thread/thread_time.hpp:19:24: note: 'boost::get_system_time' /usr/include/boost/thread/xtime.hpp: At global scope: /usr/include/boost/thread/xtime.hpp:88:1: error: expected declaration before '}' token make[2]: *** [CMakeFiles/edge_based_tracker.dir/main.o] Error 1 make[1]: *** [CMakeFiles/edge_based_tracker.dir/all] Error 2 make: *** [all] Error 2 

Any ideas? I tried changing TIME_UTC to TIME_UTC_, as it was recommended to me on another site, but that did not seem to help.

EDIT: Boost Version - Version: 1.48.0.2. I added xtime below:

 // Copyright (C) 2001-2003 // William E. Kempf // Copyright (C) 2007-8 Anthony Williams // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_XTIME_WEK070601_HPP #define BOOST_XTIME_WEK070601_HPP #include <boost/thread/detail/config.hpp> #include <boost/cstdint.hpp> #include <boost/thread/thread_time.hpp> #include <boost/date_time/posix_time/conversion.hpp> #include <boost/config/abi_prefix.hpp> namespace boost { enum xtime_clock_types { TIME_UTC=1 //LINE 23 // TIME_TAI, // TIME_MONOTONIC, // TIME_PROCESS, // TIME_THREAD, // TIME_LOCAL, // TIME_SYNC, // TIME_RESOLUTION }; struct xtime { #if defined(BOOST_NO_INT64_T) typedef int_fast32_t xtime_sec_t; //INT_FAST32_MIN <= sec <= INT_FAST32_MAX #else typedef int_fast64_t xtime_sec_t; //INT_FAST64_MIN <= sec <= INT_FAST64_MAX #endif typedef int_fast32_t xtime_nsec_t; //0 <= xtime.nsec < NANOSECONDS_PER_SECOND xtime_sec_t sec; xtime_nsec_t nsec; operator system_time() const { return boost::posix_time::from_time_t(0)+ boost::posix_time::seconds(static_cast<long>(sec))+ #ifdef BOOST_DATE_TIME_HAS_NANOSECONDS boost::posix_time::nanoseconds(nsec); #else boost::posix_time::microseconds((nsec+500)/1000); #endif } }; inline xtime get_xtime(boost::system_time const& abs_time) { xtime res; boost::posix_time::time_duration const time_since_epoch=abs_time-boost::posix_time::from_time_t(0); res.sec=static_cast<xtime::xtime_sec_t>(time_since_epoch.total_seconds()); res.nsec=static_cast<xtime::xtime_nsec_t>(time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second())); return res; } inline int xtime_get(struct xtime* xtp, int clock_type) { if (clock_type == TIME_UTC) { *xtp=get_xtime(get_system_time()); return clock_type; } return 0; } inline int xtime_cmp(const xtime& xt1, const xtime& xt2) { if (xt1.sec == xt2.sec) return (int)(xt1.nsec - xt2.nsec); else return (xt1.sec > xt2.sec) ? 1 : -1; } } // namespace boost #include <boost/config/abi_suffix.hpp> #endif //BOOST_XTIME_WEK070601_HPP 

EDIT. To make this clear, the code does not work when importing boost / thread.hpp

+7
source share
3 answers

Since you are not showing your code, we can only guess. I assume that you are defining a TIME_UTC macro somewhere in your code. This macro header is messes-up xtime.hpp .

+1
source

For those who are facing the same problem and trying to find a solution here. Obtained from the noodlebox link ( https://svn.boost.org/trac/boost/ticket/6940 ):

You can edit /usr/include/boost/thread/xtime.hpp (or wherever your xtime.hpp is located) and change all occurrences of TIME_UTC to TIME_UTC_ - perhaps around lines 23 and 71.

i.e. sed -i 's/TIME_UTC/TIME_UTC_/g'/usr/include/boost/thread/xtime.hpp

+12
source

If you get syntax errors when using Boost, you may need to compile the code with -std=c++11 .

The TIME_UTC problem you may have read is a side effect of using C ++ 11. TIME_UTC now defined as a macro in C ++ 11, so you will either need to replace all TIME_UTC instances with TIME_UTC_ , or just use a newer one (1.50. 0+ ) version of Boost, where this has already been fixed.

See: https://svn.boost.org/trac/boost/ticket/6940.

+6
source

Source: https://habr.com/ru/post/949254/


All Articles