Не могу скомпилировать C ++, который использует odeint из boost

0

Я на Ubuntu 12.04, и у меня уже был некоторый импульс повышения в /usr/include. Я сделал

sudo apt-get install libboost-all-dev

и это также установило много файлов. Я не хочу удалять этот импульс и устанавливать из источника, поскольку несколько других пакетов зависят от версии от репозиториев ubuntu. Это пример кода, который я хочу запустить: -

#include <iostream>
#include <boost/numeric/odeint.hpp>



using namespace std;
using namespace boost::numeric::odeint;

typedef vector< double > state_type;

const double sigma = 10.0;
const double R = 28.0;
const double b = 8.0 / 3.0;

void lorenz( state_type &x , state_type &dxdt , double t )
{
    dxdt[0] = sigma * ( x[1] - x[0] );
    dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
    dxdt[2] = x[0]*x[1] - b * x[2];
}

int main()
{
    const double dt = 0.01;

    state_type x(3);
    x[0] = 1.0 ;
    x[1] = 0.0 ;
    x[2] = 0.0;
    stepper_euler< state_type > stepper;
    stepper.adjust_size( x );

    double t = 0.0;
    for( size_t oi=0 ; oi<10000 ; ++oi,t+=dt )
    {
        stepper.do_step( lorenz , x , t , dt );
        cout << x[0] << " " << x[1] << " " << x[2] << endl;
    }
}

ON сначала скомпилировать g++ -o test test.cpp, он отклонил ошибку /usr/include/boost/numeric/odeint.hpp permission denied

Поэтому я изменил разрешение файла всех файлов odeint, рекурсивное использование

sudo chmod -R +x odeint/

На этот раз он не сказал, что разрешен отказ, но бросил 400 строк ошибки, как можно увидеть здесь → журнал ошибок с терминала

Как его скомпилировать? Нет руководства по установке для odeint в документации или в другом месте

  • 0
    Прежде всего: файл существует?
  • 0
    Да, все необходимые файлы существуют
Показать ещё 12 комментариев
Теги:
boost
odeint

1 ответ

1
Лучший ответ

Эта часть boost похоже, использует возможности С++ 11. Поэтому вам нужно добавить либо -std=c++0x либо -std=c++11 к вашему вызову компилятора.

Последующая ошибка test.cpp: In function 'int main(): test.cpp:30:5: error: 'stepper_euler was not declared in this scope указывает на другой источник ошибки: вы забыли stepper_euler файл, в котором stepper_euler объявляется. Поместите соответствующий #include <file> в начало вашего кода.

  • 0
    Это должно работать без C ++ 11.
  • 0
    @headmyshoulder Ошибка компилятора, указанная в комментариях к ОП, указывает на обратное. Кажется, он использует std::bind который является C ++ 11.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню