2

スタンドアロンプ​​ログラムでテストしたopensslを使用して復号化関数を作成しましたが、正常に機能しました。ただし、この関数は巨大なプロジェクトの一部であるため、そのプログラムに含める必要があります。スタンドアロンプ​​ログラムを実行するために、正常に機能する次のコマンドを使用しました。

cc -c aaa.c -I/usr/local/ssl/include
gcc -o aaa aaa.o -I/usr/local/ssl/include -L/usr/local/ssl/lib -lcrypto -lm
./aaa

この関数が呼び出されるメインプログラムのmakefileを作成しました。

両方のプログラムは個別に正常に動作していますが、プログラムの関数に定義を挿入すると、opensslのヘッダーファイルの1つ(つまりdes.h)にある変数のエラーが発生しました。タイプDES_cblockのいくつかの変数を利用しました:

typedef unsigned char DES_cblock[8];

次の定義を持つ別の構造があります。

typedef struct DES_ks
{
    union
    {
        DES_cblock cblock;
        DES_LONG deslong[2];
    }ks[16];
} DES_key_schedule;

私はこのような私のプログラムでこの構造を利用しました

DES_key_schedule keysched1,keysched2,keysched3;

しかし、それはこれらの変数を認識していません。また、スタンドアロンプ​​ログラムを実行しているときにそのようなエラーが発生しなかったため、メインプログラムでライブラリファイルを正しくリンクできないことを意味します。これを機能させるにはどうすればよいですか。これらは私が得ているエラーです:

Syntax error at line 1399, column 16,file/export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
    Error at line 1399, column 16 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
    DES_cblock hex_key1,hex_key2,hex_key3,hex_ivec,iv;
...............1
PCC-S-02201, Encountered the symbol "hex_key1" when expecting one of the followi
ng:
   ; , = : ( [ * ? | & < > + - / % . ^ *= /= %= += -= <<= >>=
   &&= ||= ^= | & == != <= >= << >> ++ -- ->
The symbol ";" was substituted for "hex_key1" to continue.
Syntax error at line 1402, column 22, file /export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
Error at line 1402, column 22 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
    DES_key_schedule keysched1,keysched2,keysched3;
.....................1
PCC-S-02201, Encountered the symbol "keysched1" when expecting one of the follow
ing:
   ; , = : ( [ * ? | & < > + - / % . ^ *= /= %= += -= <<= >>=
   &&= ||= ^= | & == != <= >= << >> ++ -- ->
The symbol ";" was substituted for "keysched1" to continue.
Syntax error at line 1436, column 38, file /export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
Error at line 1436, column 38 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
   if (DES_set_key_checked((C_Block *)hex_key1, &keysched1))

これで、プログラム全体を実行するために、プログラム内のライブラリファイルを適切にリンクする必要があります。前述のヘッダーファイルは、opensslの一部であるdes.hです。-lcryptoによっても暗号ライブラリをインクルードしようとしました。 以前はこのdes.hが適切にインクルードされていませんでしたが、今ではエラーなしでdes.hを正常にインクルードしました。また、ヘッダーファイルをインクルードするだけでは不十分で、その実装ファイルもリンクする必要があるとの提案がありました。そのため、インクルードしてリンクする方法を知りたいのですが。リンクする必要のあるリンクの名前を見つける方法。

4

2 に答える 2

1

通常、-lLDLIBS を使用してリンカにオプションを定義し、LDFLAGS を使用してフラグを定義します-L。Makefile を編集し、適切なオプションを追加します。

CPPFLAGS += -I/usr/local/ssl/include 
LDFLAGS += -L/usr/local/ssl/lib 
LDLIBS += -lcrypto -lm
于 2012-05-24T09:29:21.103 に答える
0

これらはコンパイラ エラーです。まだリンク段階に達していません。

tgl_frbsenddata.ec をコンパイルするとき、コンパイラは DES_cblock や DES_key_schedule が何であるかを認識していないと思います。コンパイラーがエラーのある行にヒットした時点で、des.h が含まれているかどうかについてあなたが信じていることが何であれ、まだ含まれていないのではないかと思います。

コンパイラには、前処理のみを行うオプションが含まれている可能性があります (gcc と clang では-E)。ソース ファイルでそのオプションを指定して実行し、typedef が表示されるかどうかを確認することをお勧めします。

于 2012-05-24T08:27:44.893 に答える