簡體   English   中英

為什么CC在標頭中看不到我的函數定義?

[英]Why does CC not see my function definition in header?

我正在ANSI C中編寫一個簡單的應用程序。我在Unix環境中使用GCC。

我有以下示例應用程序:

    //main.c

#include "foo.h"

int main()
{

int result;

result = add(1,5);

return0;
}

標頭:

  //foo.h
    #ifndef FOO_H_INCLUDED
    #define FF_H_INCLUDED

    int add(int a, int b);

    #endif

實現方式:

//foo.c

int add(int a, int b)
{
return a+b;
}

我正在使用以下命令編譯程序:

 cc main.c -o main.o

編譯器抱怨“ add引用未定義”。 這是鏈接問題嗎? 如何正確利用我的標題?

謝謝!

您需要將兩個源文件一起編譯:

cc main.c foo.c -o main

同樣,在這種情況下, -o生成可執行文件,因此將其main.o可能會誤導您。


還有另一個花絮,盡管與問題無關: foo.h#ifndef#define不匹配。

標頭不是您當前的問題。 當前的問題是您沒有在foo.c編譯add函數定義。

嘗試

cc main.c foo.c -o main.o

如果您試圖將main.c編譯成一個匯編的目標文件,則需要防止gcc嘗試鏈接。 這是通過

cc -c main.c -o main.o

您可以編譯所有其他目標文件,然后在准備好所有目標文件后,只需執行

cc main.o obj1.o anotherOBJ.o -o myExecutableBinary

“未定義的引用”是鏈接器錯誤,而不是編譯器錯誤。

編譯器會在標頭中看到該聲明 ,但是您尚未在foo.c中編譯或鏈接該定義 您的標題使用了錯誤的術語定義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM