2013-07-11 3 views
6

Я работаю над проектом на C++, используя Boost, и между компиляторами, я должен был что-то повысить в boost без смысла или что-то в этом роде, потому что теперь зависимости Boost не будут компилироваться:Ошибка увеличения, проблема с компиляцией xtime.hpp

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 

Любые идеи? Я попытался изменить TIME_UTC на TIME_UTC_, поскольку это было рекомендовано мне на другом сайте, но это, похоже, не помогло.

EDIT: версия Boost Version: 1.48.0.2. Я приложил xtime ниже:

// 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: Для того, чтобы понять, что код неудачу на импорт повышающего/thread.hpp

+0

Было бы полезно, если бы вы сказали, какая версия Boost, и показал код, который терпит неудачу, и показал, что находится в строке 23 из xtime.hpp, и уменьшил ваш код до минимального пример. На самом деле этот вопрос невозможно ответить в его нынешнем виде. –

+0

Я редактировал вопрос, чтобы включить версию Boost и xtime.hpp. Сбой кода - это просто оператор импорта. – user650261

+0

Вам не нужно копировать и вставлять код повышения. Покажите * свой * код, который вы пытаетесь скомпилировать. –

ответ

1

Поскольку вы не показываете ваш код, мы можем только догадываться, , Я предполагаю, что вы определяете макрос TIME_UTC где-то в вашем коде. Этот макрос беспорядок вверх xtime.hpp.

+2

Я не определяю TIME_UTC в любом месте моего кода. – user650261

+0

@ user650261 Предварительно обработать весь блок перевода и найти эту строку в предварительно обработанном коде. –

+0

Получил работу, спасибо! – user650261

4

Если вы используете синтаксические ошибки при использовании Boost, вам может понадобиться скомпилировать ваш код с помощью -std=c++11.

Вопрос TIME_UTC, о котором вы, возможно, читали, является побочным эффектом использования C++ 11. TIME_UTC теперь определяется как макрос в C++ 11, поэтому вам нужно либо заменить все экземпляры TIME_UTC на TIME_UTC_, либо просто использовать более новую (1.50.0+) версию Boost, где это уже было исправлено.

См: https://svn.boost.org/trac/boost/ticket/6940

+0

Небольшое примечание: это C11 (выполняется с помощью lib C's time.h), а не C++ 11 (это не ограничивается C++) – DrYak

10

Для тех, кто работает с той же проблемой и пытаются найти решение здесь. производных от noodlebox»ссылки (https://svn.boost.org/trac/boost/ticket/6940):

Вы можете редактировать /usr/include/boost/thread/xtime.hpp (или везде, где ваш xtime.hpp лежит) и заменить все вхождения TIME_UTC к TIME_UTC_ - Возможно, вокруг линий 23 и 71.

+5

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

+0

Если эта ошибка компилирует библиотеки PCL 1.7.1 с повышением 1.49.0. Это решило эту проблему (но повлекло меня к другой ошибке - о мой!). – Bull

Смежные вопросы