3

検索を試みましたが、何も見つかりませんでした。共有オブジェクトとそれにリンクするテスト バイナリをコンパイルしようとすると、次のエラーが発生します。

[root@hypervisor test-files]# ./test
./test: symbol lookup error: ./test-files.so: undefined symbol: stat
[root@hypervisor test-files]#

いろいろいじってみたところ、コンパイル中に gcc にフィード-Oすると、stat() が期待どおりに動作し始めることがわかりました。-O of all things が未定義のシンボルの問題を修正する理由 (または、エラーを修正する代わりにマスクするだけですか?) に関するオンラインの兆候を見つけることができませんでした。

4

1 に答える 1

1

おそらく、最適化によって到達不能コードの削除がトリガーされ、シンボルの必要性が完全になくなりました。

共有オブジェクトを作成したときtest-files.so、おそらく C コンパイラを使用せずにld直接呼び出しました。したがって、存在しtest-files.soていたライブラリの依存関係は存在しません。ファイルを動的にロードすると、バイナリ内で既に使用可能なシンボルを使用してシンボルを解決しようとするため、test見つけることができませんでした。

最適化を使用してコンパイルすると、 を呼び出した到達不能なコードが削除されたstatため、 の呼び出しでシンボルを解決する必要がありませんでしたdlopen()

于 2013-05-16T18:54:15.667 に答える