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

看板LinuxDev作者 (耐綸)時間12年前 (2013/03/10 16:23), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
一個簡單的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

03/10 16:59, , 1F
header file 不要指定值,把它移到別的 source file
03/10 16:59, 1F

03/10 17:04, , 2F
你現在的寫法只要有 source 檔 include a.h/b.h 就會多一
03/10 17:04, 2F

03/10 17:05, , 3F
份 a/b 的定義。
03/10 17:05, 3F

03/11 14:38, , 4F
重覆include a.h,b.h.你可以去查header file如何避免
03/11 14:38, 4F

03/11 14:38, , 5F
重覆include
03/11 14:38, 5F

03/13 09:10, , 6F
用ifdef?
03/13 09:10, 6F
文章代碼(AID): #1HF4BjNF (LinuxDev)
文章代碼(AID): #1HF4BjNF (LinuxDev)