看板 LinuxDev 關於我們 聯絡資訊
一個簡單的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
Bencrie:header file 不要指定值,把它移到別的 source file 03/10 16:59
Bencrie:你現在的寫法只要有 source 檔 include a.h/b.h 就會多一 03/10 17:04
Bencrie:份 a/b 的定義。 03/10 17:05
alongalone:重覆include a.h,b.h.你可以去查header file如何避免 03/11 14:38
alongalone:重覆include 03/11 14:38
johnny1276:用ifdef? 03/13 09:10