2012-12-10 6 views
4

Makefile을 작성했는데 제대로 작동하지 않습니다. 내가 컴파일 할 프로세서를 선택해야하는 옵션이 있습니다.오류 : -march = 스위치의 값이 잘못되었습니다.

[email protected]:~/emulators/nintendo sdks/3DS SDK [HomeBrew]$ make 
gcc -march=arm7tdmi -static -fexceptions -fnon-call-exceptions -fstack-check test.c -c 
test.c:1:0: error: bad value (arm7tdmi) for -march= switch 

make: *** [ALL] Error 1 

을하지만 GCC에 대한 매뉴얼 페이지에서, 그것은 ARM7TDMI가 허용 값입니다 상태 : 그러나 내가 명령 줄에서 make을 실행할 때, 그것은 말했다. 내가 놓친 게 있니?

메이크 : 당신은 아마 권리의 gcc를 호출하지 않는

#3DS Compilation Makefile (c) TanDex (TEQ)RunawayFreelancers 
# 
#Version 0.99 (Alpha) For *nix Devices 
# 
#Please Check Back Soon for 3rd SDK 

#SELECT THE COMPILER TO USE! GCC RECOMMENDED! 
#FOR SANITY SAKE, USE C FILES WITH GCC AND CPP FILES WITH G++ 
CC=gcc 
#CC=g++ 

#OBJECTCOPY REFERENCE, DO NOT REMOVE 
OBJC=objcopy 
OBJREFS= -O Binary 

#SELECT THE PROCESSOR TO TUNE IT TO. ARMV7 (Nintendo DS) or ARMV9(Nintendo DS 
(Graphical Support)) 
#or ARM11 Core ARM1176JZ-S and ARM1176JZF-S (3DS Processor? Not Sure if Correct. Try 
and see if they Work?) 
# 
#NOTE: DS GAMES REQUIRE BOTH A ARM7 AND ARM9 BINARY. RUN THIS TWICE (ONCE FOR EACH) 
# 
#UNCOMMENT FOR PROCESOR 

PROCESSOR=arm7tdmi 
#PROCESSOR=arm946e-s 
#PROCESSOR=arm1176jz-s 
#PROCESSOR=arm1176jzf-s 

#FILES 
# 
#PLACE ALL OF THE FILES HERE, THAT ARE BEING COMPILED! 
FILES=test.c 

#SET BIN FILE NAME BASED ON PROCESSOR SELECTED 
ifeq($(PROCESSOR),arm7tdmi)\ 
NAME=ARM7.BIN 
ifeq($(PROCESSOR), arm946e-s)\ 
NAME=ARM9.BIN 
ifeq($(PROCESSOR), arm1176jz-s)\ 
NAME=ARM11.BIN 
ifeq($(PROCESSOR), arm1176jzf-s)\ 
NAME=ARM11.BIN 

#CREATE OBJECTS 
ifeq($(CC), gcc)\ 
OBJECTS=$(FILES:.c=.o) 
ifeq($(CC), g++)\ 
OBJECTS=$(FILES:.cpp=.o) 

#FLAGS! DO NOT CHANGE THESE!!!!!!!!!!! THAT MEANS YOU!!!!! 
# 
#FOR THOSE WHO WANT TO KNOW WHAT THESE DO, HERE THEY ARE: 
#-mtune=$(PROCESSOR)  FORE THE COMPILER TO TUNE OUTPUT TO THE SPECIFIED 
PROCESSOR 
#-static   REQUIRED FOR CLEAN BINARY OUTPUT?? (NOT SURE WHAT THIS 
DOES, BUT WAS SUGESTED ON A POST ON STACKOVERFLOW) 
#-fexceptions   FORCE EXCEPTIONS 
#-fnon-call-exceptions  FORCE EXCEPTIONS TO ONLY BE RETURNED BY THE SYSTEM 
(MEMORY AND FPU INSTRUTIONS FOR EXAMPLE) 
#-fstack-check   FORCE STACK CHECKING (DS/3DS USE AWKWARD STACK 
IMPLEMENTATION) 
CFLAGS=-march=$(PROCESSOR) -static -fexceptions -fnon-call-exceptions -fstack-check 

ALL: 
$(CC) $(CFLAGS) $(FILES) -c 
.c.o: 
$(OBJC) $(OBJREFS) $(OBJECTS) $(NAME) 
.cpp.o: 
$(OBJC) $(OBJREFS) $(OBJECTS) $(NAME) 

답변

5

. 3DS SDK와 함께 제공되는 gcc 대신 시스템에 gcc가 설치되어있는 것 같습니다.

+0

아니,이 정의하게됩니다 파일 :

다음은 페이지의 일부입니다. 3ds SDK는 이것과 함께 작업중인 또 다른 프로젝트입니다. 지금은 make 파일을 테스트 할 test.c 파일이있는 폴더입니다. –

+1

@AlexanderFrankland Linux 배포판에 포함 된 GCC 버전이 ARM CPU를 지원할 가능성이 있다고 생각합니까? 나는 x86 이외의 것을 지원할 것 같지 않다. –

+1

'gcc -v 2> & 1 | grep "Target"은 컴파일러가 빌드되는 대상을 알려줍니다. Nikos가 말했듯이 교차 컴파일러 패키지를 찾고/구축해야 할 가능성이 큽니다. 이 페이지에 나열된 각 CPU : http://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html에는 '-march' 값이 있습니다. –

1

문제가 -march=arm7tdmi 인 것으로 보입니다.

해결 방법은 -march=arm7tdmi을 사용하지 않는 것이 좋습니다. -march=cpu-type을 사용하십시오. 여기서 cpu-type은 GCC 설명서의 3.17.4 ARM Options에 나열된 것 중 하나입니다.

-march=name

This specifies the name of the target ARM architecture. GCC uses this name to determine what kind of instructions it can emit when generating assembly code. This option can be used in conjunction with or instead of the -mcpu= option. Permissible names are: ‘armv2’, ‘armv2a’, ‘armv3’, ‘armv3m’, ‘armv4’, ‘armv4t’, ‘armv5’, ‘armv5t’, ‘armv5e’, ‘armv5te’, ‘armv6’, ‘armv6j’, ‘armv6t2’, ‘armv6z’, ‘armv6kz’, ‘armv6-m’, ‘armv7’, ‘armv7-a’, ‘armv7-r’, ‘armv7-m’, ‘armv7e-m’, ‘armv7ve’, ‘armv8-a’, ‘armv8-a+crc’, ‘iwmmxt’, ‘iwmmxt2’, ‘ep9312’.

+0

나는 다른 대답이 맞을 것이라고 확신한다. 그는 Nintendo 3DS에서 ARM 프로세서를 대상으로하는 gcc를 크로스 컴파일하지 않고 Intel 프로세서를 대상으로하는 시스템 gcc를 사용하고 있습니다. –

관련 문제