Arduino IDE에서 collect2.exe : error : ld returned 1 exit status가 나왔을 경우의 대처법

소개



최근 유행의 M5Stack의 파도를 타고 싶어, 너무 사용한 적이 없었던 Arduino IDE를 만지고 빠진 점 중 하나를 공유합니다.
해결하면 큰 일 없는, 오히려 초초보체로 부끄러운 정도였을지도 모릅니다만, 의외로 모르면 무슨 일이 일어나고 있는지 모른다? 라고 생각하고 있었으므로 기사로 해 보았습니다.

어떤 오류가 발생했는지



결론에 가까운 이야기에서 씁니다.
내가 Arduino IDE에서 나온 오류는collect2.exe: error: ld returned 1 exit status입니다.

원인



원인은 .ino 파일에 라이브러리와 같은 파일이 놓여 있었다는 것이었습니다.

라이브러리는 설정에 따라 다를 수 있지만,C:\Users\UserName\Documents\Arduino\libraries에 배치됩니다.

여기에 있는 .ccp, .h와 같은 파일을 스케치와 같은 디렉토리에 두면 나쁜 짓을 합니다.

조심하는 점



스케치에 넣을 파일 및 라이브러리의 파일 확인



원인으로 쓴 대로, 라이브러리에 있는 것은 스케치(.ino)의 디렉토리에는 둘 필요가 없기 때문에 삭제합니다.

헤더 피알 참조



라이브러리의 헤더를 참조하려면 <>로 묶습니다.
#include <hoge.h>

스케치(.ino) 디렉토리 다음 파일은 참조하는 경우 ""로 묶습니다.
#include "piyo.h"

빌드 파일 삭제



이것이 상당히 빠진 점이지만, 곧 이것은 파일 구성이 나쁘다는 것을 깨닫고, 스케치 디렉토리의 파일을 삭제했습니다만, 개선되지 않고 혼란했습니다.
이것은 일단 만든 빌드된 파일이 남아 있었기 때문인 것 같습니다.

내 경우에는 사전에 IDE 파일/환경 설정C:\Users\UserName\AppData\Local\Arduino15\preferences.txt편집,build.path=C:\Users\UserName\AppData\Local\Temp\arduino_build를 추가했습니다.

이 중build.path=C:\Users\UserName\AppData\Local\Temp\arduino_build\sketch에 이전 파일이 남아 있으면 빌드 오류가 개선되지 않을 수 있습니다.
그래서 그 경우는 sketch 이하의 파일을 삭제하는 것이 좋다.

Arduino IDE는 빌드 클린적인 것은 존재하지 않습니까?

컴파일 로그를 모두 표시



왜 실패했는지 알아내기 위해 이전과 동일한 환경 설정에서 コンパイラの警告全て로 선택하십시오.


그러면 상세한 컴파일 에러가 표시되므로 원인을 추측할 수 있습니다.

특히 무엇으로 오류가 발생했는지



내가 할 일은 M5Stack에서 Avatar + AquesTalkTTS를 사용하여 말하는 것입니다.
Example은 라이브러리 매니저에서 M5Stack 에서 검색하면 나오는 M5Stack_Avatar 를 Install 끝난 상황입니다.

스케치 예제의 M5Stack_Avator/talk에서는 말하는 것은 확인되어 있었으므로, 다음에 거의 같은 내용의 코드로 ino파일을 작성해, AquesTalkTTS.ccp/.h를 ino와 같은 디렉토리에 배치해 빌드했습니다.

AquesTalkTTS.ccp/.h는 이전에 Example을 실행할 때 라이브러리에 배치했기 때문에 이 문제가 발생했습니다.

참고 사이트



여기에 Arduino/ESP32계의 주의점이 다수 나와 있으므로 참고가 됩니다.
ESP32 (ESP-WROOM-32, M5Stack) 자체 문제 해결 요약

좋은 웹페이지 즐겨찾기