未定义对函数调用的引用

时间:2018-07-01 07:24:48

标签: c linker-errors undefined-reference multi-module

我是C语言的新手。我有一个作业,其中我必须利用多模块概念来编译程序。我不断收到“未定义参考”错误。该程序仅将华氏温度转换为摄氏温度。如果我仅使用一个包含函数原型,调用和定义的脚本,则该脚本可以正常工作,但由于具有多模块概念,因此会不断产生“未定义的引用”错误。我是否必须将所有三个文件放在不同或相同的文件夹中?

conversion.c:

/*
* filename: conversion.c
* Purpose: The file contains function prototype
* to convert farenheit to celsius 
*/

#include "conversion.h"
//conversion for farenheit to celsius
float convertTemp(float tmp)
{
    return ((tmp-32)*0.555);
}

conversion.h:

/*
* FILENAME:  conversion.h
* PURPOSE: The file contains function prototype
* for conversion.c
*/
float convertTemp(float tmp);

convert_driver.c:

/*
* FILENAME:  convert_driver.c
* PURPOSE:   The file contains main() function
* and user interface.
*/
#include <stdio.h>
#include "conversion.h"
int main(void)
{
    float x,y;
    printf("Please enter your temperature for conversion:  \n");
    scanf("%f", &x);
    y = convertTemp(x);
    printf("Converted Temperature: %0.2f\n", y);
    return 0;
}

我一直在这行上出错:

    y=convertTemp(x)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题出在链接编译对象上。

尝试像这样手动编译源代码:

gcc -o convert_driver convert_driver.c conversion.c

通过这种方式,编译后,编译器知道要链接的内容。

您还可以手动将源代码编译为对象,并使用静态链接器生成可执行文件:

gcc -c -o convert_driver.o convert_driver.c
gcc -c -o conversion.o conversion.c
ld -o convert_driver convert_driver.o conversion.o

对于典型的IDE,请检查是否有“创建项目”选项。多文件支持通常包含在“项目”的概念之内。