1

私は学校向けのプロジェクトを行っているので、次のようにコンパイルする必要があります。

gcc hide.c stegano.c -o hide -ansi -pedantic -Wall -Werror

しかし、私はこのエラーを受け取ります:

/tmp/ccDME1jC.o: In function `calculate_n':
stegano.c:(.text+0x0): multiple definition of `calculate_n'
/tmp/ccQxPZJu.o:hide.c:(.text+0x0): first defined here
/tmp/ccDME1jC.o: In function `tam_msg':
stegano.c:(.text+0x87): multiple definition of `tam_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0x87): first defined here
/tmp/ccDME1jC.o: In function `insere_msg':
stegano.c:(.text+0xe1): multiple definition of `insere_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0xe1): first defined here
/tmp/ccDME1jC.o: In function `copia':
stegano.c:(.text+0x201): multiple definition of `copia'
/tmp/ccQxPZJu.o:hide.c:(.text+0x201): first defined here
/tmp/ccDME1jC.o: In function `esconde_msg':
stegano.c:(.text+0x274): multiple definition of `esconde_msg'
/tmp/ccQxPZJu.o:hide.c:(.text+0x274): first defined here
collect2: ld returned 1 exit status

プログラムコードはこのようなものです。エラーはおそらくインクルードにあると思うので、実際のコードを非表示にしました。

プログラムhide.cは次のようなものです。

#include <stdio.h>
#include <stdlib.h>
#include "stegano.c"
//code//

次に、hide.cで使用される実際の関数をすべて含むstegano.cを呼び出します。

#include <stdio.h>
#include <stdlib.h>
#include "stegano.h"
//code//

そしてヘッダーファイルstegano.h:

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef unsigned char Byte;

void calculate_n(char name[MAX], int* n, int* x);
int tam_msg(char name[MAX]);
void insere_msg(int size, char name[MAX], Byte* v);
void copia(Byte* v1, Byte *v2, int size);
void esconde_msg(Byte* msg, char name1[MAX], char name2[MAX]);

助けてくれてありがとう!

4

2 に答える 2

5

これが原因:

#include "stegano.c"

これにより、すべての関数定義がにstegano.c取り込まれhide.cます。意味stegano.chide.c今は同じ関数を定義します。これにより、(コンパイルして)リンクしようとしたときに表示される複数の定義エラーが発生します。

代わりにヘッダーファイルをインクルードします。

#include "stegano.h"
于 2012-07-01T09:07:30.480 に答える
2

を削除する必要があり#include "stegano.c"ます。stegano.h代わりにファイルを含めてください。

ファイルをインクルードすることにより、.c基本的にそのファイルからコードを2回(インクルードする場合とファイルを直接コンパイルする場合に1回)コンパイルしようとします。したがって、両方stegano.ohide.o同じ関数が含まれ、リンクフェーズで機能しなくなります。

于 2012-07-01T09:07:43.707 に答える