2016-11-07 10 views
1

a.soという名前の共有オブジェクトを作成しました。これはc/C++(linux)で開発された実行可能ファイルで完全に機能しました。この共有オブジェクトは、外部ソフトウェアに統合するためのいくつかの機能を提供します。以下は、この共有オブジェクトのいくつかの特徴である:未定義参照共有オブジェクトLinux [C++]

  • 私はJNIラッパー作成していますサーバー今

とRS232

  • TCP/IP + SSL通信上のデバイスと通信は(b.so)共有オブジェクト上の共有オブジェクトを開き、ハンドラを作成するには、このコマンドを使用する

    のdlopen(FILE_NAME、RTLD_LAZY | RTLD_GLOBAL):

    しかし、それは私がエラー与えLIBをロードすることができません:/usr/lib/a.so - [/usr/lib/a.so:未定義のシンボル:EVP_cleanup]

    EVP_cleanupがa.soに使用され、 openssl/evp.hヘッダファイルの一部です。

    bssoでsslとcryptoライブラリをリンクしようとしましたが、出力は上記と同じです。

    提案や代替方法はありますか?

    おかげ

    よろしく

  • 答えて

    2

    あなただけlibssl.soであなたのコードをリンクしていることが表示されます。

    明示的にはlibcrypto.soとリンクする必要があります。 EVP_cleanup()は、libcrypto.soで定義されています。

    objdumpは、ドキュメントが不足しているときに、リンクする必要があるものを見つけ出すのに便利なツールです。

    $ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup 
    000000000012f5e0 g DF .text 0000000000000054 libcrypto.so.10 EVP_cleanup 
    
    +0

    ありがとうございます! これで問題は解決しました。 – user391318

    関連する問題