【问题标题】:Undefined reference to 'specificFunction'对“特定功能”的未定义引用
【发布时间】:2014-03-07 20:15:45
【问题描述】:

所以我知道 .h 和 .c 文件,但是我在编译代码时遇到了问题。我错过了一些东西! Main.c 包括“Converter.h”,其中有

  #ifndef CONVERTER_H
  #define   CONVERTER_H

  void runConverter(char *);

  #endif 

我的converter.c 文件有实现..

#include "Converter.h"
#include "Stack.h"
#include "Queue.h"

#include <stdio.h>
#include <stdlib.h>

int checkChar(char input);
void printQueue(QueueP que);
void runConverter(char *input){ .... code etc (calls a stack and a queue 
and does stuff)}

问题是,我的每个文件中都有未定义的引用。 .c 没有在 Stack.h 或 Queue.h 中找到信息,并且 converterTester 没有找到我的主要 runConverter 函数。有点困惑,但我认为它很小。有什么帮助吗?

【问题讨论】:

  • 您应该发布您的Converter.hStack.hQueue.h。您提供的信息不足以找出问题所在。
  • 您是否将其构建到库中,然后链接到二进制文件?
  • 你能告诉我们你用什么来建造吗?是 gcc *.c 还是 Makefile 或其他什么??
  • 我在下面发表了评论,但会在这里重申。我使用的是代码块 IDE,但程序结构有问题。诚然,我是链接多个文件的新手(我习惯于只使用一个头文件)。所以我按照下面的建议,只是打开了一个 linux VM 并做了 gcc 命令行路由。

标签: c header-files referenceerror


【解决方案1】:

没有看到其他文件,也不知道如何构建可执行文件,纯属猜测......

您需要编译每个源代码,并将所有对象链接在一起

gcc -g -O2 -Wall -c Converter.c
gcc -g -O2 -Wall -c Stack.c
gcc -g -O2 -Wall -c Queue.c
gcc -g -o pgm Converter.o Stack.o Queue.o

前三行中的-c(仅编译)标志至关重要,您不希望编译器尝试一次性创建可执行文件。不,编译器不知道您想在从Converter.c 获得的可执行文件中包含哪些其他部分。在 [SO] 上,我们非常擅长猜测,但猜测是针对人类的,而不是编译器。

【讨论】:

  • 酷,是的,成功了。我使用的是 IDE(它使用 gcc [code::blocks]),但在创建项目结构时遇到了麻烦。 Linux -> gcc 命令行就像你输入的那样工作就像一个魅力。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多