私はCでプログラミングする方法を学んでいるCSの学生です。3つのファイルと1つのMakefileがあります。私は持っています
logic.c logic.h main.c
logic.cのトップは次のとおりです。
#include "logic.h"
//use this function in 4 bit adder
//BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
int adder(int O1, int O2, BIT carryIn, BIT *carryOut){
printf("in adder");
return 0x0;
}
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co){
BIT S = FALSE;
//implementation of if else's based on Truth Table <br>
if((A==FALSE)&&(B==FALSE)&&(Ci==FALSE)){
S=FALSE;
*Co = FALSE;
} <br>
return S;
}
main.cの上部は次のとおりです。
#include "logic.h"
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
main.cにメイン関数があり、メイン関数の下部にあります:
assert((full_adder(FALSE,FALSE,FALSE,&Co)==FALSE) && (Co==FALSE));
adder(FALSE,FALSE,FALSE,&Co2);
return 0;
エラーが発生しました:
main.o: In function 'main': main.c:158: undefined referenceto 'full_adder'
collect2: ld returned 1 exit status <br>
make: *** [pa3] Error 1 <br>
./bscript: line 3: pa3: command not found
これは宿題ですが、私はこの問題にかなりの時間を費やし、助けを求めています。adder、full_adderの正しい戻り型があり、logic.cとmain.cの両方の先頭で関数を宣言します。
私の質問に答えなかった質問は次のとおりです。
どんな助けでも大歓迎です。
編集:logic.cがコンパイルされ、logic.oファイルが作成されます。
編集:私の教授は、logic.hを編集できないと言っています
編集:makefile:
# Makefile template for CS 270 (specialized for PA3)
# List of files
C_SRCS = main.c logic.c
C_OBJS = main.o logic.o
C_HEADERS = logic.h
OBJS = ${C_OBJS}
EXE = pa3
# Compiler and loader commands and flags
GCC = gcc
GCC_FLAGS = -g -std=c99 -Wall -O0 -c
LD_FLAGS = -g -std=c99 -Wall -O0
# Target is the executable
pa3 : $(OBJS)
@echo "Linking all object modules ..."
$(GCC) $(LD_FLAGS) $(OBJS) -o $(EXE)
@echo ""
# Recompile C objects if headers change
${C_OBJS}: ${C_HEADERS}
# Compile .c files to .o files
.c.o:
@echo "Compiling each C source file separately ..."
$(GCC) $(GCC_FLAGS) $<
@echo ""
# Clean up the directory
clean:
@echo "Cleaning up project directory ..."
rm -f *.o $(EXE) core a.out
@echo ""
編集:スクリプトを使用してコードをコンパイルします:
#!/usr/bin/sh
make
pa3