[오류해결] Darknet make에러: fatal error: cudnn.h: No such file or directory

2021. 6. 9. 14:12오류해결

Ubuntu에서 다크넷을 make하는 도중에 다음과 같은 에러가 나올 수 있다.

필자는 cudnn이 설치되어있지 않은 줄 알았지만 자세히 보니 설치가 되어있었다...

 

cudnn.h 파일을 계속 못찾는데 분명 path도 정해주었고, cuda폴더에도 복사가 제대로 되어있었다.

 

인터넷을 서칭했을 때, cudnn.h를 찾아서 /usr/include에 넣어주라고 하는데...뭔가 해결방법이 석연치 않았다.

 

이번에는 오류문구를 자세히 살펴보았다.

chmod +x *.sh
g++ -std=c++11 -std=c++11 -Iinclude/ -I3rdparty/stb/include -DOPENCV `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -DCUDNN -DCUDNN_HALF -Wall -Wfatal-errors -Wno-unused-result -Wno-unknown-pragmas -fPIC -Ofast -DOPENCV -DGPU -DCUDNN -I/usr/local/cudnn/include -DCUDNN_HALF -fPIC -c ./src/image_opencv.cpp -o obj/image_opencv.o
In file included from ./src/image.h:3:0,
                 from ./src/image_opencv.h:4,
                 from ./src/image_opencv.cpp:1:
include/darknet.h:46:10: fatal error: cudnn.h: No such file or directory
 #include <cudnn.h>
          ^~~~~~~~~
compilation terminated.
Makefile:182: recipe for target 'obj/image_opencv.o' failed
make: *** [obj/image_opencv.o] Error 1

 

위의 코드에서 g++빌드 명령어에서 cuDNN옵션을 살펴보자.

-DCUDNN -I/usr/local/cudnn/include

엥? 난 분명히 cudnn의 include폴더와 lib64x폴더를 cuda 폴더로 복사했는데...여기서는 /usr/local/cudnn/include를 참조하고 있다.. 그래서 못찾았네...

 

결론으로는 이 path를 자신이 cudnn include와 lib64x 폴더를 복사한 cuda경로로 바꾸어주면 된다.

 

Makefile을 텍스트문서로 열어서 다음과 같이 고쳐준다.(cuda path는 사용자마다 다를 수 있다)

그 다음 make명령어를 쳐보면 정상적으로 빌드되는 것을 볼 수 있다!!! 드디어....

cudnn 설치하는데만 2시간 걸렸는데 ㅠㅠ...

절대...cudnn을 다시 설치할 생각은 하지말자....