私が書いているプログラムがあり、それはいくつかのハッシュを計算する必要があります。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にあるため、コンパイラがヘッダーを見つけられるようにしました。./configure
make install
/usr/local/include
include
/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つの終了ステータスを返しました
少しがっかりしました。どう思いますか?