2017-12-12 12 views
0

私はgccで共有ライブラリをコンパイルし、dlopenを使用してロードしています。dlopen - 共有オブジェクトファイルを開くことができません

-fvisibility=hidden 

可視性フラグなしでライブラリをコンパイルすると、すべてが完全に機能します。しかし、フラグを付けてコンパイルすると、dlopenで次のエラーが発生します。

libtest.so: cannot open shared object file: No such file or directory 

linbrary .soファイルが存在します。これは私にとっては奇妙なことです。なぜなら、いくつかのシンボルが隠されていると、何かが見つからないとdlsymが失敗すると思います。ただし、ライブラリ(別名dlopen)をロードすると、これはすでに失敗します。

また、私は、後に任意の成功せず、(EXTERN "C")を呼び出す関数に

__attribute__ ((visibility ("default"))) 

を追加してみました。誰も私がこれについて何をすることができるか知っていますか?あるいは、これをデバッグしてdlopenが失敗する理由を突き止める方法はありますか?私は可視性フラグを削除したくない。なぜなら、彼は実行可能ファイルサイズを大幅に減らすからだ。

+0

'LD_DEBUG = all'で実行して、結果を報告できますか? – yugr

+0

ありがとうございます。私の共有ライブラリは見つからなかった別のlibに依存していました。 LD_DEBUGありがとう、それについて知らなかった。 – goocreations

答えて

0

私のlibは、見つからなかった別のlibに依存していました。

関連する問題