我正在为一个类(class)编写我的第一个 C 程序;我已经设法消除了大部分语法错误,但是当 gcc 尝试将目标文件链接在一起时,我遇到了一个奇怪的错误。它的打印完全如下所示:
gcc -o proj04.support.o proj04.driver.o
Undefined first referenced
symbol in file
convert proj04.driver.o
我环顾四周寻找一些答案,但没有一个对我来说真正有意义。我将在下面发布我用来制作程序的文件,如果您得到了答案,我将非常感谢您的帮助。这似乎是一个非常基本的错误,所以这可能是我没有做的愚蠢的事情。
Makefile (首先发布这个是因为我怀疑问题出在这里)
# Comments
# Comments
proj04: proj04.support.o proj04.driver.o
gcc -o proj04.support.o proj04.driver.o
proj04.support.o: proj04.support.c
gcc -Wall -c proj04.support.c
proj04.driver.o: proj04.driver.c
gcc -Wall -c proj04.driver.c
头文件(教授提供,不可更改,一行):
int convert( int, unsigned, char[], int )
实现文件
#include <stdio.h>
#include "/user/cse320/Projects/project04.support.h"
#include <string.h>
void formatdisplay( char[], int );
int convert( int I, unsigned base, char result[], int display )
{
int quotient, dividend, remainder;
const int divisor = base;
int count = 0;
char ending[] = " base ";
dividend = I;
remainder = 0;
quotient = 1;
while (quotient != 0)
{
if (count <= strlen(result))
{
quotient = (dividend / divisor);
remainder = (dividend % divisor);
//convert to ascii char
result[count] = remainder;
count++;
}
}
formatdisplay ( result, display );
strrev(result);
if ( I >= 0 ) { result[0] = '+'; }
if ( I < 0 ) { result[0] = '-'; }
printf( "%s" , strcat (result, ending));
}
void formatdisplay ( char str[], int disp )
{
if ( disp < 0 )
{
unsigned i = 0;
for ( i; i < strlen(str)-1; i++)
{
if ( str[i] = '\0') { str[i] = '0'; }
}
}
if ( disp >= 0 )
{
unsigned i = 0;
for ( i; i < strlen(str)-1; i++)
{
if ( str[i] = '\0') { str[i] = ' '; }
}
}
}
驱动文件 (尚未真正实现)
#include <stdio.h>
#include "/user/cse320/Projects/project04.support.h"
int main () {
char Result1[32];
int T = convert(10, 2, Result1, 1);
}
最佳答案
是的,问题可能出在 Makefile 中:
proj04: proj04.support.o proj04.driver.o
gcc -o proj04.support.o proj04.driver.o
-o
的 gcc
选项接受一个参数,即输出文件名。所以这是要求 gcc
链接文件 proj04.driver.o
,生成 proj04.support.o
的输出文件。gcc -o proj04 proj04.support.o proj04.driver.o
应该工作得更好。关于c - "Undefined symbol <function> first referenced in file <file>"链接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5036321/