2014-03-14 4 views
2

그래서 CImg을 사용하여 이미지를 기록하고 표시하려고하지만 Eigen이라는 선형 대수 라이브러리도 사용하고 있습니다. 우연히도, 그것들은 각각 같은 이름의 "성공"매크로를 가지고있는 것처럼 보입니다. #undef를 시도했지만 원활하게 작동하지 않았습니다. 그래서 컴파일 할 때마다 "성공"이 다른 파일에서 두 번 정의된다는 오류가 발생합니다. 매크로를 잃지 않고이 오류를 제거하려면 어떻게해야합니까? 도움을 많이 받으실 수 있습니다!고유 및 CImg 호환성 문제

답변

0

코드에서 매크로 중 하나가 필요 없으면 2 포함 사이에 #undef 수 있습니다. 그래서, 그것은 당신이 코드에서 당신이 필요로하는 것에 정말로 관여합니다.

+0

음, 선형 대수학 목적으로 Eigen을 사용해야하며 CImg.h가 포함 된 클래스가 하나 있습니다. 이 특정 파일은 컴파일하는 데 문제가 있으며 _X 객체가 여러 번 참조되지만 올바른 방법으로 참조되지는 않는다는 오류를 연결합니다. 나는 CImg.h가 X11 파일을 가져온다는 것을 알고있다. (나는 Mac에 있었기 때문에) 링크가 작동한다고 생각 했었지만, 왜 그렇게하지 않는지 혼란 스럽다. 왜 나는 지금 연결 오류가 발생하는지에 대한 아이디어가 있습니까? – user2196118

1

Eigen도 CImg도 #define이 아닙니다. 그러나 Eigen은 Eigen 네임 스페이스에 그러한 열거 형을 가지고 있으므로 문제는 성공을 #define하는 X11 X.h 헤더 파일에서 유래 할 가능성이 큽니다.

X11에서 성공을 사용해야하는 경우 X11 (또는 포함 할 수있는 모든 사용자) 앞에 Eigen의 헤더를 포함하십시오.

Eigen에서 Success가 필요하면 Eigen last와 #undef Success를 포함하십시오.

2

CImg에는 "Success"라는 매크로가 정의 된 X11 헤더 X.h가 포함되어 있기 때문에 문제가 발생합니다. 이 매크로는 Eigen의 ComputationInfo 열거 형 정의와 충돌합니다. "Success"라는 enum 값이 있기 때문입니다.

해결 방법으로

, 당신은 CIMG을 포함한 후 "성공"정의를 해제하고 수 있도록 아이겐를 포함하기 전에 :

#include <CImg/CImg.h> 
#ifdef Success 
    #undef Success 
#endif 
#include <eigen3/Eigen/Eigen> 
도 참조 아이겐의 버그 추적기에 # 253를 발행

: http://eigen.tuxfamily.org/bz/show_bug.cgi?id=253

1

당신은 또한 할 수있다 "CImg.h"을 포함하기 전에 cimg_display0으로 정의하거나 컴파일 할 때 -Dcimg_display=0 플래그를 넣어서 CImg에 X11 헤더 파일의 포함을 표시하려고합니다. 물론 CImg의 디스플레이 기능이 필요하지 않은 경우에만이 작업을 수행하십시오.