2014-02-24 5 views
2

나는 고유를 사용하여 다음 테스트 프로그램이 있습니다-I 플래그를 지정하지 않고 eigen을 사용하여 C++ 프로그램을 컴파일하는 방법은 무엇입니까?

#include <iostream> 
#include <Eigen/Dense> 

using namespace std; 
using Eigen::MatrixXd; 

int main() { 
    MatrixXd m(2, 2); 
    m(0, 0) = 3; 
    m(1, 0) = 2.5; 
    m(0, 1) = -1; 
    m(1, 1) = m(1, 0) + m(0, 1); 
    cout << m << endl; 
} 

을 나는 g++ -I/usr/include/eigen3/ test1.cpp로 컴파일 할 수 있습니다.

그러나 포함 플래그를 지정하지 않으면 compile 명령이 작동하지 않습니다. /usr/include 아래의 헤더가 컴파일러에서 자동으로 선택한다고 생각했기 때문에 이상하게 보였습니다 (예 : 부스트 헤더도 /usr/include 아래에 위치, 컴파일러에게 어디에서 찾을지를 묻지 않고 완벽하게 작동 함). 컴파일시 -I 플래그를 지정할 필요가 없도록 고유 설정에 어떤 변경을해야합니까?

답변

8

당신이

#include <eigen3/Eigen/Dense> 

에 의해

#include <Eigen/Dense> 

교체하는 경우 코드는 컴파일됩니다. 즉, /usr/include/eigen3 디렉토리에 <Eigen/Dense>이 포함되어 있지만 컴파일러는 기본적으로 /usr/include 만 검색합니다.

<eigen3/Eigen/Dense>을 포함하는 대신 포함 플래그를 사용하는 것이 좋습니다. 배포본, 운영 체제 등에서 이식성이 높기 때문이며 일반적으로 다른 환경에서 컴파일을 구성하는 것이 더 쉽습니다. Eigen3에는 사용하기 쉽고 휴대하기 쉬운 pkg-config 파일이 있습니다.

g++ $(pkg-config --cflags eigen3) test1.cpp 

로 컴파일하면 PKG-설정을 사용할 수있는 모든 플랫폼에서 작동하고 하드 코딩 포함 경로를 피하고 싶은 경우에, 당신을위한 훌륭한 대안입니다 것입니다.

+1

eigen3 하위 폴더에 Eigen이 설치되어 있다는 보장이 없기 때문에''를'eigen3 /'접두어와 함께 사용하지 않는 것이 좋습니다. 그것은 포장업자의 책임입니다. – ggael