2010-07-19 2 views
3

저는 행렬 연산의 벡터화를 약속하는 Eigen 라이브러리를 사용하고 있습니다. 나는 Eigen에서 주어진 파일을 사용하고 makefile을 작성하는 방법을 모른다. 아래와 같은 아이겐으로 사용할 수 있도록 소스 파일이 파일을 포함, 이들은 심지어 (그들은 단지 일부 텍스트 파일) 파일 헤더되지 않습니다 - 등선형 대수학을위한 C++ 템플릿 라이브러리 인 Eigen을 사용하는 C++ 프로젝트 용 메이크 파일을 작성하는 방법은 무엇입니까?

<Eigen/Core> 
<Eigen/Dense> 
<Eigen/Eigen> 

하고 있습니다. Eigen의 웹 페이지에서는 프로젝트를 빌드 할 필요가없는 기능을 사용하기 위해 프로젝트를 빌드 할 때 어떻게 makefile에 이러한 파일을 포함시킬 수 있는지 언급했습니다. 예제 main.c 파일은 다음과 같습니다.

#include <Eigen/Core> 

// import most common Eigen types 
USING_PART_OF_NAMESPACE_EIGEN 

int main(int, char *[]) 
{ 
    Matrix3f m3; 
    m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9; 
    Matrix4f m4 = Matrix4f::Identity(); 
    Vector4i v4(1, 2, 3, 4); 

    std::cout << "m3\n" << m3 << "\nm4:\n" 
    << m4 << "\nv4:\n" << v4 << std::endl; 
} 

도움말 - 사람이 파일에 대한을 메이크 메이크 파일을 작성하는 방법을 나에게 보여줄 수!

+0

어떻게 컴파일하고 링크합니까? –

답변

6

Eigen's website에 따르면이 헤더 전용 라이브러리입니다.

이것은 컴파일하거나 링크 할 수 없음을 의미합니다. 대신 표준 위치 (* nix/Mac의 경우 /usr/local/include)에 헤더 파일이있는 한 해당 위치를 전처리 기 빌드 단계에 추가하면됩니다.

당신이 * nix에서 스크립트/맥을 실행하고 (예를 들어 #include <Eigen/Core> 참조에게 파일 /usr/local/include/Eigen/Core을) 당신이 모든 기본 위치에 설치되어 있다고 가정합니다, 다음 SUPER 간단한 메이크 파일은 다음과 같이 것이라고 가정 :

main: main.cpp 
    g++ -I /usr/local/include main.cpp -o main 

  • mainmain를 만들기 위해 main.cpp
  • 에 따라, 사용 : 영어로 말한다

    g++ 그것에 대해

주를 알고하지 않는 헤더에 대한 디렉토리 /usr/local/include을보고 컴파일 main.cpp,

  • 출력 파일 main,
    • 하려면 다음 TAB있다 g++ 행 앞에 4 개의 공백이 없어야합니다.

      희망이 있습니다.

  • 1

    문서에이 내용이 있습니다.

    g++ -I /path/to/eigen2/ my_program.cpp -o my_program 
    
    There is no library to link to. 
    

    템플릿 (헤더) 파일 경로를 Makefile의 포함 디렉토리에 추가하면됩니다.

    1

    사실 헤더 파일입니다. Eigen은 템플릿 라이브러리이며 일반적인 템플릿 연습에서는 별도의 파일에 정의 및 선언을 유지하는 템플릿이 아닌 연습에 따라 헤더 파일에 정의 및 선언을 모두 포함합니다. 감속과 정의가 분리되어있는 경우 정의를 포함하는 소스 파일을 라이브러리 오브젝트 파일에 빌드하여 프로그램에 링크해야합니다.

    이것은 Eigen 헤더 파일을 처음부터 포함시키는 행위로 이미 표면 상 가능합니다.

    Eigen 헤더 파일을 시스템 경로에 설치했다면 사용자 정의 부분없이 프로그램에 컴파일됩니다. 당신이 당신의 포함 경로로를 설치하지 않은 경우, 단순히 ++ 소스 내가

    g을 명령 사용할 경우

    g++ -I /path/to/eigen2/ source_file -o output_file 
    
    0

    당신이 어떤 포트란 라이브러리를 필요 ...과 같이 g ++, 여기에 전체 경로를 제공 .cpp -o 출력 -I /../ 포함 -L /../ lib -L /../ lib64 -lcholmod -lmetis -lamd -lcamd -lccolamd -lcolamd -llapack -lgfortran -lblas

    ..

    +0

    이것이 어떻게 Eigen ..와 관련이 있는지 확실하지 않습니다. – Amro

    관련 문제