0

Windows 用の sscep (http://www.klake.org/~jt/sscep/) というツールを作成しようとしています。ネイティブには動作せず、Windows でコンパイルできるように sscep を変更する「パッチ」があります。パッチを適用した後、完全にコンパイルされますが、リンカーはねじ込みます。minGW/msys で gcc を使用しています。元のメッセージは、暗号ライブラリが見つからないというものだったので、「-L../openssl-mingw/lib」を使用してライブラリを追加しましたが、エラーは発生しませんでした。また、コマンドにコマンド ライン スイッチ -lcrypto がありますgcc -L../openssl-mingw/lib -lcrypto sscep.o init.o net.o sceputils.o pkcs7.o ias.o fileutils.o -o sscep。このディレクトリには libcrypto.a があります。OpenSSL 自体は、実行中のまったく同じコンパイラでコンパイルされました./config && make && make test && make install。また、ソースは 7-zip ではなく minGW tar を使用して抽出されました。

すべてのドキュメントに従った後、これは私の(切り捨てられた)出力です:

sscep.o:sscep.c:(.text+0x83): undefined reference to `WSAStartup@8'
sscep.o:sscep.c:(.text+0xa5): undefined reference to `WSACleanup@0'
sscep.o:sscep.c:(.text+0x3d5): undefined reference to `BIO_new_mem_buf'
sscep.o:sscep.c:(.text+0x3e0): undefined reference to `ASN1_INTEGER_new'
sscep.o:sscep.c:(.text+0x414): undefined reference to `a2i_ASN1_INTEGER'
sscep.o:sscep.c:(.text+0x432): undefined reference to `ASN1_INTEGER_to_BN'
sscep.o:sscep.c:(.text+0x448): undefined reference to `BN_bn2dec'
sscep.o:sscep.c:(.text+0xb7e): undefined reference to `EVP_des_cbc'
sscep.o:sscep.c:(.text+0xbaf): undefined reference to `EVP_bf_cbc'
sscep.o:sscep.c:(.text+0xbda): undefined reference to `EVP_des_cbc'
sscep.o:sscep.c:(.text+0xc02): undefined reference to `EVP_des_ede3_cbc'
sscep.o:sscep.c:(.text+0xc48): undefined reference to `EVP_md5'
sscep.o:sscep.c:(.text+0xc79): undefined reference to `EVP_md5'
sscep.o:sscep.c:(.text+0xca1): undefined reference to `EVP_sha1'

これは、そこにあるすべてのファイルと、おそらく呼び出されたすべての関数に対して行われます。here と google を検索すると、ライブラリが見つかりませんでしたが、上記の -L ディレクティブを省略すると、libcrypto が見つからないという別のエラーが発生します。だから私はライブラリが実際に見つかったと思いますが、アドレスが間違っているか何かがありますか?

ここで、私のコンパイラ/リンカーの知識は実際には終わりです。パッチがその原因である可能性がある場合 (これらはすべて openssl 関数であり、コンパイルが機能するため、私は信じていません)、それを提供できます。

編集:誰かが私を助けることができるように提供する必要がある情報はありますか? これにより違いが生じる場合、openssl のバージョンは 1.0.1 です。このトピックについて: 違いがある場合、バージョンが間違っているためにこのエラーが発生する可能性があります。私がリンカ理論を理解している限り、このエラーは、以下のすべての関数が別の名前の関数に置き換えられない限り、間違ったバージョンに起因するものではありません (しかし、コンパイラは文句を言うでしょう?)。

別の追加: 私は 64 ビットの Windows 7 を使用しているため、-m32 フラグを使用してコンパイルしようとしましたが、役に立ちませんでした。mingw はすでに 32 ビットのみであるため、x64 をビルドすることさえできないと思います。もう 1 つの質問は、「-march=i486」コマンドを使用して openssl をビルドしているときに、AMD Opteron の仮想化環境で実行していることに問題があるかどうかです。

4

1 に答える 1

1

いくつかの助けを借りて、私はついにこれを理解することができました! それは順序の問題であり、ライブラリが見つからないという問題でした。組み合わせは私を殺しました。

ライブラリは-lcrypto -lws2_32 -lgdi32ただのものではありませんでした-lcrypto。さらに、オブジェクト ファイルのにライブラリを追加する必要があったため、: が適切な make 行でした。$(CC) $(CFLAGS) $(OBJS) -lcrypto -lws2_32 -lgdi32 -o $(PROG)

最後にこれで、正常にコンパイルされます。アーキテクチャフラグなども必要ありませんでした。

于 2012-05-22T11:00:59.710 に答える