对名为'的函数的未定义引用;全加器(A位、B位、Ci位、Co位)和x27;
我是一名CS学生,正在学习如何用C语言编程。我有3个文件和一个Makefile。我有 logic.c logic.h main.c logic.c的顶部是:对名为'的函数的未定义引用;全加器(A位、B位、Ci位、Co位)和x27;,c,undefined-reference,C,Undefined Reference,我是一名CS学生,正在学习如何用C语言编程。我有3个文件和一个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("i
#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中我有我的main函数,在main函数的底部我有:
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
首先,将定义与声明分开: 逻辑h:
#ifndef _LOGIC_H_
#define _LOGIC_H_
/* Define BIT as before */
int adder(int O1, int O2, BIT carryIn, BIT *carryOut);
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
#endif
逻辑c:
#include <stdio.h>
#include "logic.h"
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
if((A==FALSE)&&(B==FALSE)&&(Ci==FALSE)){
S=FALSE;
*Co = FALSE;
}
return S;
}
现在事情已经到了应该的位置,您的逻辑.h
为编译器提供了所需的信息
您的makefile
不应该只需要这三个文件就需要任何花哨的东西
这需要通过makefile
完成:
gcc -c -o main.o main.c
gcc -c -o logic.o logic.c
gcc -o main main.o logic.o
(您的
全加器中的逻辑问题留给您解决…我看到链接器没有根据对象文件的顺序查找/查找函数。
在makefile中,您可能希望尝试更改顺序:
C_OBJS = logic.o main.o
我在logic.c和main.c的顶部声明函数
功能原型
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
在逻辑中,应该只发生一次
您收到的错误来自链接器
您可能只想尝试在Makefile外部编译/链接它:
gcc -c logic.c
gcc -o main main.c logic.o
我假设他们都想让你发布makefile,你真的在实现全加器吗
?请展示你是如何编译代码的?显示您的makefile?@H2CO3我想您的意思是“我正在制作一个全加器的逻辑表示吗?”是的。很多不是门和与门,最终我将制作一个4位加法器。至少我的答案对logic.h
文件没有任何更改。我只是加入了它的一个精简版本,以显示事情的发展方向,仅此而已。您是否尝试过对logic.c
和main.c
进行建议的更改?
gcc -c -o main.o main.c
gcc -c -o logic.o logic.c
gcc -o main main.o logic.o
C_OBJS = logic.o main.o
BIT full_adder(BIT A, BIT B, BIT Ci, BIT *Co);
gcc -c logic.c
gcc -o main main.c logic.o