0

これが私の defs.h の構造です。

#ifndef DEF_H
#define DEF_H
#include <stdio.h>

...

int var = 20;
int test = 1;

...

#endif

今、main.c と util.c があり、すべて次のようになっています。

#include "defs.h"

これは私のメイクファイルです:

all: clean compile

compile: clean main
    @echo SUCCESS: COMPILED FILES

main: main.o util.o
    cc main.o util.o -o progname

main.o: main.c
    cc -o main.o -c main.c

util.o: util.c
    cc -o util.o -c util.c

clean:
    -rm -rf *.a *.o *.so progname
    @echo SUCCESS: CLEANED FILES

ただし、make を実行すると、両方のオブジェクト ファイルが正常にコンパイルされますが、最終的なリンクを実行すると、次のようになります。

util.o:(.data+0x0): multiple definition of `var'
main.o:(.data+0x0): first defined here

私は何か間違った構造をしていますか?どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2