0

http://www.efgh.com/software/rijndael.htmからいくつかの AES 実装コードをコンパイルしようとしています。txt ファイルを取得し、それを分割して 3 つのファイルを取得しました。

encrypt.c
decrypt.c
rijndael.h

encrypt.cこの3つのファイルすべてを同じフォルダーに置いて、またはファイルのいずれかをコンパイルしようとしましたdecrypt.cが、実際にある未定義の関数に関するいくつかのエラーがスローされますrijndael.h

私はこのようにコンパイルを実行しています:

gcc -o encrypt encrypt.cまたgcc -o decrypt decrypt.c

そして私は得る:

/tmp/cch6JvXT.o: 関数内main:
encrypt.c:(.text+0x127): rijndaelSetupEncrypt
encrypt.c:(.text+0x1c6) への未定義の参照: collect2 への未定義の参照rijndaelEncrypt
: エラー: ld が 1 つの終了ステータスを返しました

しかしrijndaelSetupEncryptrijndaelEncryptrijndael.h ファイルにあります

4

2 に答える 2

1

「未宣言関数」エラーと「未定義関数」エラーには違いがあります。最初のものは、使用した関数のプロトタイプ (関数ヘッダーのみを意味する) が見つからない場合に発生します。プロトタイプは通常、.h ファイルに入れられ、.c ファイルに含まれます。2 番目のエラーは、プロトタイプが見つかったが関数の定義が見つからなかった場合に表示されます。関数の定義 (関数の本体全体を意味する) は、ライブラリまたはコンパイル コマンドに追加する必要がある別の .c ファイルのいずれかに存在する可能性があります。

「未定義関数」エラーについては、試すことができます

gcc -o enc_dec encrypt.c decrypt.c

見つからない関数が、言及した2つの.cファイルのいずれかにある場合。そうでない場合は、ライブラリをリンクするのを忘れている可能性があります。

後で編集
rijndael.cファイルを使用:

gcc -o decrypt rijndael.c decrypt.c
gcc -o encrypt rijndael.c encrypt.c

rijndael.h に関数がなくても構いませんmain。私は、decrypt.c と encrypt.c で使用されるいくつかの関数の定義があると思います。

于 2013-07-07T21:04:00.813 に答える
1

実際、あなたの例では、encrypt.c decrypt.c rijndael.c と rijndael.h の 4 つのファイルが必要です。

したがって、rijndael.c と encrypt.c をコンパイルするか、または復号化を一緒にコンパイルする必要があります。.h ファイルは、.h (ヘッダー) ファイルを含む c ファイルのコンパイル中に自動的に使用されます。

于 2013-07-07T20:56:06.327 に答える