Go로 맥용 빌드한 앱에서 bad cpu type 에러 발생했는데 해결책은?
Go로 macOS용 바이너리를 빌드했을 때 "bad CPU type in executable" 오류가 발생하는 주요 원인은 아키텍처 불일치입니다. 특히 Apple Silicon(M1/M2)과 Intel 맥이 공존하는 환경에서 발생할 수 있습니다.
GOARCH=amd64 go build -o bgm_app_amd64 main.go
GOARCH=arm64 go build -o bgm_app_arm64 main.go
lipo -create -output bgm_app bgm_app_amd64 bgm_app_arm64
rm bgm_app_amd64 bgm_app_arm64 # (선택 사항) 중간 파일 삭제
chmod +x bgm_app # 실행 권한 추가
🔍 원인 확인
- 현재 실행하려는 바이너리의 아키텍처 확인:예제 출력:위와 같은 경우 x86_64 아키텍처용으로 빌드되었으므로, ARM(M1/M2) 맥에서는 실행되지 않을 수 있습니다.
-
arduino복사편집your_app: Mach-O 64-bit executable x86_64
-
sh복사편집file your_app
- 현재 사용 중인 맥의 아키텍처 확인:예제 출력:
- x86_64: Intel 기반 맥
- arm64: Apple Silicon(M1/M2) 맥
-
sh복사편집uname -m
💡 해결 방법
1. 올바른 아키텍처로 빌드
현재 맥에 맞는 아키텍처로 다시 빌드해야 합니다.
Apple Silicon(M1/M2)에서 실행하려면:
Intel 맥에서 실행하려면:
2. 유니버설 바이너리(모든 맥에서 실행 가능) 생성
Apple Silicon과 Intel 모두에서 실행 가능한 유니버설 바이너리를 빌드하려면:
이렇게 하면 your_app이 두 아키텍처에서 모두 실행 가능합니다.
3. CGO_ENABLED 문제 확인
만약 CGO를 사용하는 경우, CGO_ENABLED=1이 설정되어 있으면 빌드된 바이너리가 특정 아키텍처에서만 실행될 수 있습니다.
CGO를 비활성화하고 빌드하는 것도 방법입니다:
4. 실행 권한 문제 확인
바이너리가 올바른 아키텍처로 빌드되었는데도 실행되지 않는다면 실행 권한 문제일 수 있습니다:
이렇게 시도해보면 bad CPU type in executable 오류를 해결할 수 있을 겁니다.
혹시 여전히 문제가 있다면 추가적인 빌드 설정이나 오류 로그를 공유해 주세요! 😊
ChatGPT의 말:
빌드할 때 불필요한 파일이 섞여 있어서 문제가 발생하는 것 같습니다. 현재 finder.go, finder2.go, finder2-filter.go 등의 파일에서 중복 선언(redeclaration) 오류가 발생하고 있어요.
✅ 해결 방법
빌드할 때 main3.go만 포함하도록 명령어를 수정하세요.
1. 필요한 파일만 지정해서 빌드
이렇게 하면 main3.go만 사용해서 빌드되므로 다른 파일들의 충돌을 방지할 수 있습니다.
2. 불필요한 파일 제외하고 빌드할 수도 있음
만약 main3.go가 다른 .go 파일을 참조해야 한다면, go build 실행 전에 패키지를 정리하는 것이 좋습니다.
이후에도 bad CPU type in executable 오류가 나면, 다시 유니버설 바이너리 빌드 방법을 적용하면 됩니다.
⚡️ 이제 다시 실행해 보고 오류가 해결되는지 확인해 보세요! 🚀
Go로 macOS용 바이너리를 빌드했을 때 "bad CPU type in executable" 오류가 발생하는 주요 원인은 아키텍처 불일치입니다. 특히 Apple Silicon(M1/M2)과 Intel 맥이 공존하는 환경에서 발생할 수 있습니다.
원인 확인
1. 현재 실행하려는 바이너리의 아키텍처 확인
file your_app
예제 출력:
your_app: Mach-O 64-bit executable x86_64
위와 같은 경우 x86_64 아키텍처용으로 빌드되었으므로, ARM(M1/M2) 맥에서는 실행되지 않을 수 있습니다.
2. 현재 사용 중인 맥의 아키텍처 확인
uname -m
예제 출력:
- x86_64: Intel 기반 맥
- arm64: Apple Silicon(M1/M2) 맥
해결 방법
1. 올바른 아키텍처로 빌드
현재 맥에 맞는 아키텍처로 다시 빌드해야 합니다.
Apple Silicon(M1/M2)에서 실행하려면:
GOARCH=arm64 go build -o your_app
Intel 맥에서 실행하려면:
GOARCH=amd64 go build -o your_app
2. 유니버설 바이너리(모든 맥에서 실행 가능) 생성
Apple Silicon과 Intel 모두에서 실행 가능한 유니버설 바이너리를 빌드하려면:
GOARCH=amd64 go build -o your_app_amd64
GOARCH=arm64 go build -o your_app_arm64
lipo -create -output your_app your_app_amd64 your_app_arm64
이렇게 하면 your_app이 두 아키텍처에서 모두 실행 가능합니다.
3. CGO_ENABLED 문제 확인
만약 CGO를 사용하는 경우, CGO_ENABLED=1이 설정되어 있으면 빌드된 바이너리가 특정 아키텍처에서만 실행될 수 있습니다.
CGO를 비활성화하고 빌드하는 것도 방법입니다:
CGO_ENABLED=0 GOARCH=arm64 go build -o your_app
4. 실행 권한 문제 확인
바이너리가 올바른 아키텍처로 빌드되었는데도 실행되지 않는다면 실행 권한 문제일 수 있습니다:
chmod +x your_app
./your_app
유니버설 바이너리 빌드 (bgm_app)
다음 명령어를 실행하면 bgm_app의 유니버설 바이너리를 생성할 수 있습니다.
이렇게 하면 Apple Silicon(M1/M2)과 Intel 맥에서 모두 실행 가능합니다.
GOARCH=amd64 go build -o bgm_app_amd64 main3.go
GOARCH=arm64 go build -o bgm_app_arm64 main3.go
lipo -create -output bgm_app bgm_app_amd64 bgm_app_arm64
rm bgm_app_amd64 bgm_app_arm64 # (선택 사항) 중간 파일 삭제
chmod +x bgm_app # 실행 권한 추가
위 명령어를 실행한 후, bgm_app을 복사해서 바로 실행하면 됩니다.
빌드 시 불필요한 파일 제외
빌드할 때 main3.go만 포함하도록 명령어를 수정하세요. 만약 불필요한 파일이 빌드 과정에서 영향을 주고 있다면 go mod tidy 명령어를 사용하여 패키지를 정리한 후 다시 빌드하는 것도 방법입니다.
go mod tidy
go build -o bgm_app main3.go
위 방법을 사용하면 bad CPU type in executable 오류를 해결할 수 있을 것입니다.
'Tech : 데이터 분석 > by ChatGPT' 카테고리의 다른 글
[2025-02-25] 한국은행 기준금리 0.25%p 인하 연 2.75%로 조정 (0) | 2025.02.26 |
---|---|
[2025-02-05] "서울시의회, 상업·준주거지역 내 비주거시설 비율 완화 추진" 뉴스 분석 (0) | 2025.02.26 |
RStudio 콘솔창에서 폰트컬러를 구분하는 방법 (0) | 2025.02.14 |
기억이 날듯 말듯한 유튜버 찾기 (0) | 2025.01.10 |
맥에서 동영상(.mov)파일을 4배속으로 저장하는법 (0) | 2025.01.10 |
댓글