1

VIM と Makefile のみを使用して、Debian で次のコードを SDCC でコンパイルしようとしています。

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  -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

問題の原因となっている可能性があることがいくつかあります。

  • --use-non-freeSDCC を使用して PIC 用にコンパイルする場合、一部の PIC ヘッダー ファイルには GPL と互換性のない特別なマイクロチップ ライセンスがあるため、このオプションが必要です。さらに、--use-non-freeリポジトリから SDCC をインストールした場合、Debian の自由度のポリシーにより、Debian では利用できない可能性があります。公式 Web サイトから最新の SDCC をインストールする必要があります。

  • リンク段階では、実行に必要な PIC ライブラリを含める必要があります。を実行してみてくださいsdcc -mpic14 -p16f88 --use-non-free -V test2.c。このように、SDCC は自動的にリンクし、-V(verbose) を使用すると、アセンブラーとリンカーへの呼び出しを確認し、リンクに追加されたライブラリを確認できます。

于 2014-09-29T16:56:37.747 に答える