2013-11-09 2 views
0

나는 우분투 12.04에있다. &은 이미/usr/include에 약간의 부스트가있다. 나는부스트에서 odeint를 사용하는 C++을 컴파일하는 카툰

sudo apt-get install libboost-all-dev 

등 많은 파일도 설치했습니다. 나는 다른 패키지가 우분투 repos에서 버전에 의존하므로이 부스트를 제거하고 소스에서 설치하고 싶지 않습니다. 이것은 내가 실행하고자하는 샘플 코드입니다 : -

#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; 
    } 
} 

처음 컴파일 g++ -o test test.cpp ON, 그것은 반복적으로

를 사용 /usr/include/boost/numeric/odeint.hpp permission denied

그래서 나는 모든 odeint 파일의 파일 권한을 변경 오류를 던졌다

sudo chmod -R +x odeint/ 

이번에는 허가가 거부되었지만 여기에서 볼 수있는 것처럼 400 줄의 오류가 발생했습니다. ->error log from terminal

어떻게 컴파일합니까? 문서 나 다른 곳의 odeint에 대한 설치 안내서는 없습니다

+0

우선 : 파일이 존재합니까? – stefan

+0

예, 필요한 모든 파일이 존재합니다 –

+0

odeint가 우분투 repos의 부스트 버전과 호환되지 않을 수 있으며 대체 방법이 없지만 기본적으로 odeint를 제공하는 소스에서 최신 부스트를 설치할 수 있습니까? –

답변

1

이 부분의 boost은 C++ 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이 선언 된 파일을 포함하는 것을 잊었습니다. 코드의 시작 부분에 적절한 #include <file>을 입력하십시오.

+0

C++ 11없이 작동해야합니다. – headmyshoulder

+0

@headmyshoulder 주석에 제공된 OP가 그렇지 않을 경우 컴파일러 오류가 발생합니다. C++ 11 인'std :: bind'를 사용하는 것 같습니다. – stefan

+0

나는 이것이 C++ 11없이 작동한다는 것을 확신한다 (나는 저자 중 한 명이다). C++ 11이 활성화되어 있는지 확인하는 전 처리기 매크로가 있습니다. 그렇다면 std :: bind, 다른 boost :: bind를 사용합니다. – headmyshoulder

관련 문제