錯誤我試圖編譯我的C程序,我收到一些奇怪的編譯錯誤,我不知道它是從哪裏過來。我已經發現了類似的帖子,但是他們用-o指定輸出的解決方案不起作用。編譯錯誤中包含「多重定義」
所以這是我的makefile怎麼樣子(縮短了):
CC = gcc -O3 -Wextra -Wall -pg -g -std=c99
OBJ = ./src/main.o ./src/FUNC.o ./src/getRoot.o ./src/getTree.o
out: $(OBJ)
g++ -std=c99 -g -o ./myProgramm $(OBJ)
./src/FUNC.o: src/FUNC.c
$(CC) -c src/FUNC.c -o ./src/FUNC.o
./src/main.o: src/main.c
$(CC) -c src/main.c -o ./src/main.o
./src/getRoot.o: src/getRoot.c
$(CC) -c src/getRoot.c -o ./src/getRoot.o
./src/getTree.o: src/getTree.c
$(CC) -c src/getTree.c -o ./src/getTree.o
這是錯誤我得到的一部分:
./src/FUNC.o:(.rodata+0x78): multiple definition of `khStrInt'
./src/main.o:(.rodata+0x0): first defined here
./src/FUNC.o: In function `get_nbr_edge_kmer':
/home/Documents/EXAMPLE_CODE/src/FUNC.c:126: multiple definition of `DISTANCE_MAX'
./src/main.o:(.rodata+0x4): first defined here
./src/getRoot.o:(.rodata+0x0): multiple definition of `DISTANCE_MAX'
./src/main.o:(.rodata+0x4): first defined here
./src/main.o:(.rodata+0x4): first defined here
./src/getTree.o:(.rodata+0x0): multiple definition of `DISTANCE_MAX'
./src/main.o:(.rodata+0x4): first defined here
./src/getRoot.o:(.rodata+0x0): multiple definition of `khStrInt'
是否有人也許有一些想法是我我在這裏做錯了:/
擁有源代碼是有用的,你可能有功能'khStrInt'在頭文件中定義(定義意味着它有一個機構),並有頭文件'include'd在多個'.c'文件中。這意味着編譯會多次生成'khStrInt'的代碼,所以你會得到多個定義錯誤。類似的事情適用於您的其他多重定義。只需在頭文件中聲明函數並在'.c'文件中定義函數體即可解決此問題。 – Winestone
Unforunately,這是沒有問題...... khStrInt僅僅是一個常數'const int的khStrInt = 33'在getRoot.h定義,然後將其他文件都包括這個頭文件來使用它。 – malajedala
是的,我正在構建正如你所建議的代碼,所以在頭寫的函數原型,然後定義在C文件中的函數體,然後包括在C文件的頭,我需要他們 – malajedala