[英]Why the linker does not see my function (define macro to substitute the syslog)?
[英]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.