caffe_ssd 우연히 컴파일 버그 설명 및 해결 기록
3013 단어 caffe
CXX src/caffe/data_transformer.cpp
In file included from src/caffe/data_transformer.cpp:8:0:
./include/caffe/data_transformer.hpp:69:24: error: ‘AnnotatedDatum’ does not name a type
void Transform(const AnnotatedDatum& anno_datum,
^
./include/caffe/data_transformer.hpp:71:35: error: ‘AnnotationGroup’ was not declared in this scope
RepeatedPtrField* transformed_anno_vec);
^
./include/caffe/data_transformer.hpp:71:50: error: template argument 1 is invalid
RepeatedPtrField* transformed_anno_vec);
^
./include/caffe/data_transformer.hpp:72:24: error: ‘AnnotatedDatum’ does not name a type
void Transform(const AnnotatedDatum& anno_datum,
^
......
한 걸음 한 걸음
error:'AnnotatedDatum'does not name a type 설명에 정의를 찾지 못했습니다. "/include/caffe/data_transformer.hpp:69:24:"
void Transform(const AnnotatedDatum& anno_datum,
Blob* transformed_blob,
RepeatedPtrField* transformed_anno_vec);
결론 마찬가지: 정의가 없다.
grep, AnnotatedDatum의 정의가 어디에 있는지 봅시다. 곧 찾을 수 있습니다.
“caffe/proto/caffe.pb.h”
그래서 이 카페를 보세요.pb.h어떻게 왔길래make의 첫걸음
PROTOC src/caffe/proto/caffe.proto
의 산물, 사실,caffe.proto--→caffe.pb.이 과정은 성공적,caffe.pb.h도 경로에 포함됩니다.
그럼 질문이 왔습니다.
CXX src/caffe/data_transformer.cpp에서 헤더 파일caffe를 찾았습니다.pb.그리고 카페.pb.h도 AnnotatedDatum에 정의를 주었는데 왜 컴파일할 때 AnnotatedDatum에 정의가 없습니다(caffe.pb.h를 찾지 못하는 것이 아니라)????
일련의 고통스러운 debug를 거친 이유는 Makefile의 한마디에 있다.
COMMON_FLAGS += $(foreach includedir,$(INCLUDE_DIRS),-isystem $(includedir))
파란색 글자 부분을 주의하고,
- isystem은 gcc의 매개 변수로 인용 경로를 표시하지만
If a standard system include directory, or a directory specified with-isystem, is also specified with-I, the -Ioption is ignored. The directory is still searched but as asystem directory at its normal position in the system include chain. This is to ensure that GCC's procedure to fix buggy system headers andthe ordering for the
include_next
directive are not inadvertently changed. If you really need to change the search order for system directories,use the-nostdinc and/or -isystem options.
대의는 - isystem에서 - I 안의 헤더 파일과 충돌하면 무시합니다 - I!!!!!!!
즉, 시스템 (예를 들어/usr/local/include) 등에 같은 이름의 파일이 있으면 로컬 (예를 들어/홈/XXX/caffe/include) 헤더 파일 검색을 하지 않습니다.
공교롭게도 제가 전에 카페를 설치했을 때 또 한 번 cmake를 사용했습니다. 손으로 make install을 썼습니다...그래서 내 시스템에는 확실히 기초caffe 환경이 있는데 ssd와 다르다...
이로써
알파벳을 몇 개 바꿨어요:-isystem----->-I
문제 해결.
그런데 이 알파벳 몇 개가 이틀이나 걸렸어요. 다 그런 건 아니지만 생각만 해도 가슴이 아파요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
error: too few arguments in function call최근에 caffe가 오류를 보고했습니다. 제 cudnn 버전(cuDNN:ver.7.0.5)입니다. 그리고 caffe에서 cudnn 버전이 너무 낮아서 오류가 발생했습니다. 해결 방법: 장: 수정: 전재:https:/...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.