我正在为一个类(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
-ogcc 选项接受一个参数,即输出文件名。所以这是要求 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/

10-11 18:41