我尝试使用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)
完成所有这些后,运行makefile后的输出是:
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
我尝试过更复杂的代码,结果相同, 我看不出有什么不对,有人吗?
答案 0 :(得分:1)
我看到几件可能导致问题的事情:
使用SDCC编译PIC时,需要选项--use-non-free
,因为某些PIC头文件具有不与GPL兼容的特殊Microchip许可证。此外,如果您从存储库安装SDCC,则可能无法在Debian上使用--use-non-free
,因为它们具有自由策略。您需要从official website安装最新的SDCC。
在链接阶段,您应该包含运行所需的PIC库。尝试执行sdcc -mpic14 -p16f88 --use-non-free -V test2.c
。这样,SDCC自动链接,并且使用-V
(详细),您可以看到对汇编器和链接器的调用,并且可以看到链接上添加的库。