Makefile Can';t在debian上用SDCC为pic编译简单代码

Makefile Can';t在debian上用SDCC为pic编译简单代码,makefile,pic,sdcc,Makefile,Pic,Sdcc,我试图用SDCC在Debian中仅使用VIM和Makefile编译以下代码: void main(void) { } 是的,很简单,它还不起作用。我使用的Makefile如下所示: # GNU/Linux specific Make directives. # Declare tools. SHELL = /bin/sh CC = sdcc LD = gplink ECHO = @echo MCU = 16f88 ARCH = pic14 CFLAGS = -m$(ARCH) -

我试图用SDCC在Debian中仅使用VIM和Makefile编译以下代码:

void main(void) {

}
是的,很简单,它还不起作用。我使用的Makefile如下所示:

# GNU/Linux specific Make directives.

# Declare tools.
SHELL = /bin/sh
CC = sdcc 
LD = gplink 
ECHO = @echo

MCU = 16f88
ARCH = pic14

CFLAGS  = -m$(ARCH) -p$(MCU) 
LDFLAGS = -c -r -w -m I /usr/share/sdcc/lib/$(ARCH)/

EXECUTABLE = t1

SOURCES = test2.c 
OBJECTS = $(SOURCES:.c=.o)
CLEANFILES = test2.o test2.asm test2.map test2.lst

.SUFFIXES: .c .o
.PHONY: clean

# Compile
all: $(EXECUTABLE)

.c.o:
    $(AT) $(CC) $(CFLAGS) -o $*.o -c $<

$(EXECUTABLE): $(OBJECTS)
    $(AT) $(LD) $(LDFLAGS) $(OBJECTS) -o $(EXECUTABLE)

clean:
    $(AT) rm -rf $(CLEANFILES)
我试过更复杂的代码,结果也一样,
我看不出哪里出了问题,有人吗?

我看到了一些可能会给您带来问题的因素:

  • 当您使用SDCC为PIC编译时,您需要选项
    --使用非免费的
    ,因为某些PIC头文件具有特殊的微芯片许可证,该许可证与GPL不兼容。此外,如果您从存储库安装SDCC,Debian上可能无法使用非免费的,因为他们的自由策略。您需要从安装最新的SDCC

  • 在链接阶段,您应该包括运行所需的PIC库。尝试执行
    sdcc-mpic14-p16f88——使用non-free-vetest2.c
    。这样,SDCC会自动链接,通过
    -V
    (verbose),您可以看到对汇编器和链接器的调用,并可以看到链接上添加的库

sdcc  -mpic14 -p16f88  -o test2.o -c test2.c
gplink  -c -r -w -m I /usr/share/sdcc/lib/pic14/ test2.o -o t1
make: *** [t1] Segmentation fault