Fw: [問題] 一個簡單的makefile錯誤

看板C_and_CPP (C/C++)作者 (耐綸)時間13年前 (2013/03/10 16:23), 編輯推噓0(006)
留言6則, 5人參與, 最新討論串1/1
※ [本文轉錄自 LinuxDev 看板 #1HF4BjNF ] 作者: e12518166339 (耐綸) 看板: LinuxDev 標題: [問題] 一個簡單的makefile錯誤 時間: Sun Mar 10 16:23:02 2013 一個簡單的makefile的習題,如題,錯誤訊息如下 a.o:(.rodata+0x0):「a」的多重定義 ab.o:(.rodata+0x0):第一次定義在此 b.o:(.rodata+0x0):「b」的多重定義 ab.o:(.rodata+0x4):第一次定義在此 collect2: 錯誤: ld 回傳 1 make: *** [lab1] Error 1 我的makefile source code如下: lab1:ab.o a.o b.o gcc -o lab1 ab.o a.o b.o ab.o:ab.c a.h b.h gcc -c ab.c a.o:a.c a.h gcc -c a.c b.o:b.c b.h gcc -c b.c clean: rm -f *.o 不清楚到底是那裡出錯了,有人可以為我解惑嗎? 另外附上相關檔案 a.h : const int a=1; b.h : const int b=2; a.c: #include<stdio.h> #include<stdlib.h> #include"a.h" void a_fun() { printf("a=%d\n",a); } b.c: #include<stdio.h> #include<stdlib.h> #include"b.h" void b_fun() { printf("b=%d\n",b); } ab.c: #include<stdio.h> #include<stdlib.h> #include"a.h" #include"b.h" void main() { printf("a+b=%d\n",(a+b)); } 明明是一個簡單的練習,可是我不曉得錯在那找了找網路似乎也沒人犯過這種錯 可能這種錯很低能,但是希望各位前輩不吝賜教 感謝大家 -- 「不需要讓青少年有判斷力和批判力。只要給他們汽車、摩托車、美麗的明星、刺激的音 樂、流行的服飾,以及對同伴的競爭意識就行了。剝奪青少年的思考力,根植他們服從指 導者命令的服從心才是上策。讓他們對批判國家、社會和指導者保持著一種動物般原始的 憎惡。讓他們深信那是少數派和異端者的罪惡。讓他們都有同樣的想法。讓他們認為想法 和大家不同的人就是國家的敵人……」 by 阿道夫·希特勒 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 27.245.238.60 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: e12518166339 (27.245.238.60), 時間: 03/10/2013 16:23:51

03/10 16:41, , 1F
header 不是拿來這樣用的..
03/10 16:41, 1F

03/10 16:43, , 2F
http://tinyurl.com/aee3w4q 你可以看看這個
03/10 16:43, 2F

03/10 16:51, , 3F
所以我是錯在.h檔?可是我單獨拉出來編譯都沒有問題
03/10 16:51, 3F

03/10 17:01, , 4F
external?
03/10 17:01, 4F

03/10 17:06, , 5F
因為 a,b 都重複定義了呀, 你在 ab 裡面跟其他的檔案的撞
03/10 17:06, 5F

03/10 17:42, , 6F
.h裡用extern宣告,真正宣告放.c
03/10 17:42, 6F
文章代碼(AID): #1HF4COOK (C_and_CPP)
文章代碼(AID): #1HF4COOK (C_and_CPP)