2010/04/12 13:36
이번에 CUDA 어플리케이션을 만들면서 참으로 다양한 경험을 했는데, 그 중 하나가 바로 include관련된 문제였다. "sampling.cu"라는 파일에서 "FileWriter.h", "FileReader.h", "qSort.h"를 include하고 있었는데 이 3개의 헤더파일에 정의되어있는 함수들을 찾지 못한다는 오류가 계속 뜨는 것이었다. 저 3개의 헤더파일은 "FileWriter.c", "FileReader.c", "qSort.c"의 헤더파일들로 프로젝트내 유일한 C파일들이었다. 결국 아래처럼 궁여지책으로 직접적으로 C파일을 CU파일에 직접 include 하였다.
.....
#include "common.h"
#include "FileWriter.c"
#include "FileReader.c"
#include "qSort.c"
#include "utilFunc.h"
.....
이로서 프로그램은 동작하였지만 저 3개파일에 대한 경고가 계속 반복적으로 발생하였다. 재정의를 하고 있는 거 같다는 등의 여러가지 경고들이었다. 결국 너무 찝찝한 맘을 가누지 못하고 이래저래 다른 방법들을 시도해보았는데, 어디에선가 "CU파일에선 C파일을 include할 수 없다"라는 소리를 들은 것 같은 기억이 났다. 아마 nvcc 컴파일러의 특징 때문이라고 그랬던 것 같은데 어렴풋한 기억으로는 C에서 CU파일을 include하는 것은 가능하지만, 그 반대의 경우는 허용되지 않는다고 했던 것 같기에 3개의 C파일들의 확장자를 모두 CU로 바꿔주고 include하고 있는 파일내의 코드도 아래와 같이 변경하였다.
.....
#include "common.h"
#include "FileWriter.h"
#include "FileReader.h"
#include "qSort.h"
#include "utilFunc.h"
.....
이렇게 변경하고 난 뒤 compile을 해본 결과, 별 문제 없이 잘 되더라. 어디서 들었던 건지는 정확히 기억은 나지 않지만, 아마 내 기억이 맞았나보다. 결국 CU파일에서는 C파일에 대한 헤더파일들을 include했을때 제대로 함수들을 찾아 링크시키지 못하는 것 같다. C에서 CU파일의 헤더파일을 include할 거 아니면 아예 첨부터 속편하게 다 cu파일들로만 파일들을 구성해서 만드는 게 속편하겠다 싶다...ㅋ CUDA는 쓰기가 어지간히 까탈스러운게 아닌 것 같다....ㅋ
'Programming > CUDA' 카테고리의 다른 글
| CU에서 C파일 include (0) | 2010/04/12 |
|---|---|
| Eclipse에서 CUDA 셋팅하기 (0) | 2010/04/07 |
| CUDA 1주차 강의내용 (3/3) (0) | 2009/04/28 |
| CUDA 1주차 강의내용(2/3) (0) | 2009/04/27 |
| CUDA 1주차 강의내용(1/3) (0) | 2009/04/23 |
| CUDA에서 Template Project 활용 팁(?) (0) | 2009/04/23 |
TAG CUDA include