1

私が書いているプログラムがあり、それはいくつかのハッシュを計算する必要があります。SHA、MD、HMACアルゴリズムが必要です。それが私が解決策として選んだ理由ですopenssl

私のコードは次のとおりです。

#include <openssl/md4.h>

void calc();

void calc(unsigned char* data, unsigned long len) {
  unsigned char* h = new unsigned char[128];
  MD4(data, len, h);
}

コンパイラは私に次を返します:

myfile.cpp:(。text + 0x3e): `MD4'への未定義の参照collect2:ldが1つの終了ステータスを返しました

私は単純に以下を使用してコンパイルします:

g++ myfile.cpp -o myapp.o

LinuxFedoraの下で。

ここopensslからライブラリをダウンロードし、cbyを使用してコンパイルし、ダウンロードしたuntarpalledディレクトリにコンパイルしました。また、ダウンロードしたディレクトリのディレクトリをディレクトリにコピーして、env varにあるため、コンパイラがヘッダーを見つけられるようにしました。./configuremake install/usr/local/includeinclude/usr/local/include$PATH

ただし、問題は、リンカが関数を見つけられないことです。理由は2つあると理解しています。

  • コンパイラーはヘッダーを見つけることができますが、実装を見つけることができません。
  • opensslに書かれてCいないので問題がありますC++

どのように進めればよいですか?ありがとうございました

編集1

私は実際に私ので何かを変更しましたopenssl installation

opensslもう一度インストールすると、すべて/usr/local/sslが検索可能なディレクトリの下に配置されていることがわかりました。コンパイル文字列を次のように変更します。/usr/local/ssl/include/usr/local/ssl/lib

g++ -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto

前に述べたディレクトリには、それぞれ、/usr/local/ssl/include/opensslすべてのヘッダー/usr/local/ssl/lib/libssl.a/usr/local/ssl/lib/libcrypto.aライブラリが含まれるディレクトリがあります。

古いコンパイルコマンドを使用したときにこの変更を行う前に、コンパイラは次のように言っていましたCannot find -lssl。これらの変更により、ライブラリとヘッダーを見つけることができるようになりましたが、ld常に同じ方法で失敗します。

myfile.cpp:(。text + 0x3e): `MD4'への未定義の参照collect2:ldが1つの終了ステータスを返しました

少しがっかりしました。どう思いますか?

4

2 に答える 2

2

に対してリンクするにopensslは、通常、が必要-lsslです。

g++ -o myapp myfile.cpp -lssl 

ちなみに、インストールが少し間違っているようです。

ヘッダーファイルをどこかにコピーする必要はありません。そして、とにかく共有ライブラリをコピーしていない可能性があります。

コンパイルは次のようになります。

./configure --prefix=/usr/local/openssl
make
make install

次に、次のようにプログラムをコンパイルします。

g++ -c -o myapp1.o myfile1.cpp -I/usr/local/openssl/include
g++ -c -o myapp2.o myfile2.cpp -I/usr/local/openssl/include
g++ -o myapp myapp1.o myapp2.o -I/usr/local/openssl/include -L/usr/local/openssl/lib -lssl -lcrypto
于 2012-10-13T14:23:34.953 に答える
1

このエラーは、コンパイル中にプログラムをopensslライブラリにリンクしないために発生します。

で修正

g++ myfile.cpp -o myapp.o -lssl

GCCのOpenSSLリンクオプション-lsslおよび-lcryptoを参照してください

プログラムをopensslにリンクする方法について。

于 2012-10-13T14:27:14.137 に答える