5

openssl をコンパイルしようとしていますが、エラーが発生します。使用中の CFLAGS は次のとおりです。

-O2 -fPIC -fno-strict-overflow

.rodata誰かが私に次の文が何であり、何を意味するのか説明してもらえますか?

/usr/bin/ld: libcrypto.a(wp_block.o): relocation R_X86_64_32S against `.rodata'
can not be used when making a shared object; recompile with -fPIC
libcrypto.a(wp_block.o): error adding symbols: Bad value

libcrypto.a が何であるかはわかりませんが、openssl の一部であるようです。

どうすればこれを修正できますか?

4

2 に答える 2

12

/usr/bin/ld: libcrypto.a(wp_block.o): 共有オブジェクトを作成する場合、`.rodata' に対する再配置 R_X86_64_32S は使用できません。-fPIC libcrypto.a(wp_block.o) で再コンパイル: シンボルの追加中にエラーが発生しました: 値が正しくありません

事実上、これは共有オブジェクトを構築していることを意味しますが、指定していません-fPIC。PIC は位置に依存しないコードであり、アドレスがプログラム カウンターに対して相対的であることを保証するため、コードを簡単に再配置できます (モジュールのベース アドレスは簡単に変更でき、機能します)。

この問題は Fedora で見たことがあると思います。で使用していると主張しているのでCFLAGS、代わりにこれを試してください:

$ make clean && make dclean
$ export CFLAGS="-fPIC"
$ ./config shared no-ssl2 ...
$ make
...

これmake clean && make dcleanにより、すべての成果物 (古いオブジェクト ファイルを含む) が消去されます。

新しいバージョンの OpenSSL はmake distclean、 ではなくに応答しmake dcleanます。


libcrypto.a が何であるかはわかりませんが、openssl の一部であるようです。

これは、OpenSSL が AES、Cameilla、SHA、big integers などの暗号およびヘルパーを配置するライブラリでlibssl.aあり、SSL および TLS が配置される場所です。libssl.aに依存しますlibcrypto.a


OpenSSL の新しいバージョンは、インストール後に共有ライブラリを見つけることができません。問題 3993、libssl.so.1.1: OpenSSL バグ トラッカーで共有オブジェクト ファイルを開けないも参照してください。

ライブラリが実行可能ファイルを壊さないように、静的リンクを使用したい。その場合は、Makefile で と の使用法を見つけて、 と に変更することを-lsslお勧めします。-lcrypto-l:libssl.a-l:libcrypto.a

于 2014-08-23T21:24:00.650 に答える