0

私は ubuntu に取り組んでおり、OpenSSL を使用する C++ ライブラリを開発しています。

そのため、コードの開発に使用する PC には OpenSSL バージョン 2010 が搭載されています。lib を作成し、簡単なテスト プログラムでコンパイルすると、正常に実行されます。

次に、他の PC (最新の OpenSSL バージョン - 2012 年 5 月) で lib をテストすると、簡単なテスト プログラムを正常にコンパイルできますが、実行するとクラッシュします。

OpenSSL のバージョンを 2010 から最後の .

したがって、たとえば、簡単なテスト プログラムで lib をコンパイルしている PC の OpenSSL バージョンに関係なくコードを実行するために、OpenSSL に必要なファイルで lib を作成する可能性があるかどうかを知りたいです。 .

lib を作成するために、ファイルを .obj ファイル (例: g++ -c fileA.c -o fileA.o) にコンパイルしてから、libABC.a ファイル (ar rcs libABC.a filaA.o fileB. o ...)。「-lssl」コンパイル オプションのみを使用して、ライブラリを残りのコードとリンクします。例: g++ simpleCode.o libABC.a -o Test -lssl

よろしく、 セルジオ

4

1 に答える 1

0

通常、このような問題は、互換性のないバージョンのライブラリに別の名前を付けることで解決されます (例: libssl.0.9.7 と libssl.1.0.0)。libssl.so のバージョンにバージョン管理された soname がない場合、それは壊れています。

ライブラリの soname と、プログラムがリンクされている soname を確認するには、次のコマンドを実行します。

 ldd /path/to/your/program/Test | grep openssl
 objdump --private-headers /usr/lib/libssl.so* | grep SONAME

プログラムが libssl.0.9.7 とリンクされている場合、他のバージョンでは起動しません。

于 2013-01-14T14:57:15.103 に答える