0

私は最近、iOS SDK4.3nm -m -p -gSystem.B.dylibライブラリを実行しましたが、多くのシンボルがマークされていることに驚きました(undefined) (external)。未定義のシンボルが外部としてマークされるのはなぜですか? lazyorとマークされた未定義の外部シンボルは理解できますweakが、そうではありません。関数の多くは、pthread_xxxこのカテゴリに分類されます。ただし、このライブラリとリンクすると、すべてのシンボルが解決されます。pthread_xxxシンボルはフォルダー内のライブラリの 1 つに定義されているので\usr\lib\system、そこから満足していると思います。リンク中にどのように機能しますか?

4

2 に答える 2

2

私がCコーディングの忍者だったnmのは久しぶりですがld、これは、これがリンクしている他のライブラリがあることを意味しているだけだと思います。

于 2011-09-21T16:46:36.840 に答える
0

通常、これが動的リンクの仕組みです。System.B の静的アーカイブを nm に記録した場合、この動作は観察されませんでした。System.B.dylib だけではあまり効果がありません。関数を利用する動的および静的ライブラリのアンサンブルセットの一部としてそれを作成しない限り。最終的なバイナリをコンパイルしようとして、ライブラリ パス '/usr/lib/system' を省略した場合、リンカはファウルを叫び、 pthread_XXX() への参照が見つからないことを示すエラーで終了します (上記の例を使用) )。バイナリの最終的なアセンブル中に、使用されるすべての関数の場所を確実に把握する必要があります。

HTH

于 2011-09-21T17:28:24.783 に答える