1

我正在尝试使用 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

我尝试了更复杂的代码,结果相同,我看不出有什么问题,有人吗?

4

1 回答 1

1

我发现有几件事可能会导致您出现问题:

  • 当您使用 SDCC 编译 PIC 时,您需要该选项--use-non-free,因为某些 PIC 头文件具有不兼容 GPL 的特殊 Microchip 许可证。此外,--use-non-free如果您从存储库安装 SDCC,由于他们的自由政策,可能无法在 Debian 上使用。您需要从官方网站安装最新的 SDCC 。

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

于 2014-09-29T16:56:37.747 回答