본문 바로가기
Tech : 데이터 분석/by ChatGPT

[Go언어] 맥용으로 빌드한 앱에서 "bad CPU type" 오류 발생 시 해결 방법

by 프롭테크 2025. 2. 18.
반응형
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  # 실행 권한 추가

 


🔍 원인 확인

  1. 현재 실행하려는 바이너리의 아키텍처 확인:예제 출력:위와 같은 경우 x86_64 아키텍처용으로 빌드되었으므로, ARM(M1/M2) 맥에서는 실행되지 않을 수 있습니다.
  2. arduino
    복사편집
    your_app: Mach-O 64-bit executable x86_64
  3. sh
    복사편집
    file your_app
  4. 현재 사용 중인 맥의 아키텍처 확인:예제 출력:
    • x86_64: Intel 기반 맥
    • arm64: Apple Silicon(M1/M2) 맥
  5. sh
    복사편집
    uname -m

💡 해결 방법

1. 올바른 아키텍처로 빌드

현재 맥에 맞는 아키텍처로 다시 빌드해야 합니다.

Apple Silicon(M1/M2)에서 실행하려면:

sh
복사편집
GOARCH=arm64 go build -o your_app

Intel 맥에서 실행하려면:

sh
복사편집
GOARCH=amd64 go build -o your_app

2. 유니버설 바이너리(모든 맥에서 실행 가능) 생성

Apple Silicon과 Intel 모두에서 실행 가능한 유니버설 바이너리를 빌드하려면:

sh
복사편집
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를 비활성화하고 빌드하는 것도 방법입니다:

sh
복사편집
CGO_ENABLED=0 GOARCH=arm64 go build -o your_app

4. 실행 권한 문제 확인

바이너리가 올바른 아키텍처로 빌드되었는데도 실행되지 않는다면 실행 권한 문제일 수 있습니다:

sh
복사편집
chmod +x your_app ./your_app

이렇게 시도해보면 bad CPU type in executable 오류를 해결할 수 있을 겁니다.
혹시 여전히 문제가 있다면 추가적인 빌드 설정이나 오류 로그를 공유해 주세요! 😊


 
폴더 안에 main3.go 파일을 빌드할거고 다른 불필요한 게 섞여있는데 그것 때문인가?

ChatGPT의 말:

빌드할 때 불필요한 파일이 섞여 있어서 문제가 발생하는 것 같습니다. 현재 finder.go, finder2.go, finder2-filter.go 등의 파일에서 중복 선언(redeclaration) 오류가 발생하고 있어요.

✅ 해결 방법

빌드할 때 main3.go만 포함하도록 명령어를 수정하세요.

1. 필요한 파일만 지정해서 빌드

sh
복사편집
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 # 실행 권한 추가

이렇게 하면 main3.go만 사용해서 빌드되므로 다른 파일들의 충돌을 방지할 수 있습니다.

2. 불필요한 파일 제외하고 빌드할 수도 있음

만약 main3.go가 다른 .go 파일을 참조해야 한다면, go build 실행 전에 패키지를 정리하는 것이 좋습니다.

sh
복사편집
go mod tidy go build -o bgm_app main3.go

이후에도 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 오류를 해결할 수 있을 것입니다.

 

 

반응형

댓글