なぜLeopardは$ non_lazy_ptrでいくつかのシンボルをマングルするのですか?もっと重要なのは、シンボルが$ non_lazy_ptrでマングルされているため、未定義のシンボルエラーを修正する最良の方法は何ですか?
答えて
より:Developer Connection - Indirect Addressing
間接アドレッシングは、ファイルのレイアウトの明示的な知識を持っている参照ファイルを必要とせず、一つのファイルで定義されたシンボルは、他のファイルから参照されることを可能にするコード生成技術の名前でありますそれはシンボルを定義します。したがって、定義ファイルは参照ファイルとは独立して変更することができます。間接アドレッシングは、ダイナミックリンカによって変更する必要がある場所の数を最小限に抑え、コード共有を容易にし、パフォーマンスを向上させます。
ファイルが別のファイルで定義されたデータを使用する場合、シンボル参照が作成されます。シンボル参照は、シンボルがインポートされるファイルと参照シンボルを識別します。記号の参照には、非遅延と遅延の2種類があります。
非遅延シンボル参照は、モジュールがロードされたときにダイナミックリンカによって解決されます(定義にバインドされています)。 非遅延シンボル参照は基本的にシンボルポインタで、ポインタサイズのデータです。コンパイラは、データシンボルまたは関数アドレス用の非遅延シンボル参照を生成します。
レイジーシンボル参照は、動的リンカによって最初に使用されたとき(ロード時ではなく)に解決されます。後続の参照シンボルの呼び出しは、シンボルの定義に直接ジャンプします。 遅延シンボル参照は、シンボルポインタとシンボルスタブで構成されます。シンボルスタブは、シンボルポインタを直接参照してジャンプする少量のコードです。コンパイラは、別のファイルで定義された関数への呼び出しを検出すると、遅延シンボル参照を生成します。
human-speak:コンパイラは、$ non_lazy_ptrにスタブを追加して、リンクを高速化します。 _Foo $ non_lazy_ptrから参照される関数Fooが定義されていない、あるいはそのようなものがあります。これらは同じものではありません。シンボルが実際に宣言され、アプリケーションをリンクしているオブジェクトファイル/ライブラリにエクスポートされていることを確認してください。少なくともそれは私の問題でした。問題が別の場所にあることが判明するまでは変わったリンカーだと思っていました。Googleには他にもいくつかの原因が考えられます。
RANLIB -cライブラリファイルに他の誰かが私が持っていた同じ問題をつまずく場合は、問題
が修正されています。
は、ヘッダファイル内extern NSString* const someString;
を持っていたが、それを実装ファイルを置くのを忘れていました。 as NSString* const [email protected]"someString";
これを解決しました。
ranlib -c libwhatever.a
は、この問題の解決策です。 iOS用のPJSIPライブラリを構築するときも同じ問題がありました。このライブラリsort-ofは、autoconfベースのmakeシステムを使用しますが、iOSのためにすべてのものを整えるために、さまざまなファイルを少し微調整する必要があります。それを行う過程で、ライブラリのルールでranlib行を削除してから、_PJ_NO_MEMORY_EXCEPTION$non_lazy_ptr
から参照される_PJ_NO_MEMORY_EXCEPTION
についてのプロジェクトのリンクにエラーが発生し始めました。
ライブラリファイルにranlib行を戻して解決しました。今ルールにLIBSの完全なエントリ。MAKは、iPhoneまたはiOSで外部ライブラリを構成し、一般的なUNIXを使用しようとして
$(LIB): $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
if test ! -d $(LIBDIR); then $(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)),$(HOST_MKDIR)); fi
$(LIBTOOL) -o $(LIB) $(OBJS)
$(RANLIB) -c $(LIB)
希望これは、同様に他の人を助けています。
- 1. Mac OSX 10.5(Leopard)は64ビットプロセスを実行できますか?
- 2. OSX 10.5のX11ライブラリ?
- 3. EmguCV on OSX Snow Leopard
- 4. Xcode 3.2(Snow Leopard上)で10.5ビルドエラー
- 5. bash with symbol with split
- 6. parse_ini_file issue with $ symbol
- 7. mac osx(snow leopard)にnumpyをインストール
- 8. xcode 4を使用していますが、OSX Leopard(10.5)以上をターゲットにしています
- 9. Mac OSX 10.5のPHP用Eclipse: "Animation Start"エラー
- 10. 10.5 LeopardでXCode 4.2を実行できますか?
- 11. 10.5 LeopardでXCode 3.2を実行できますか?
- 12. SDL with g ++ with OSX Lion
- 13. Python/CocoaプロジェクトをデフォルトOSX 10.5 Python(2.5)を使用するように戻す
- 14. NSComboBoxアイテム値がLeopard(10.5)で編集された後にメソッドを呼び出す
- 15. mvc2 Html.label( "mystring")mangling
- 16. Python - Mac OSX Snow Leopardにmatplotlibをインストールする
- 17. osx-sudo with password execute
- 18. NSSavePanelがファイルを保存していません。 (OSX 10.5)
- 19. OSX 10.5の下でアップルキーボードのメディアキーにバインドする
- 20. mac osx snow leopardにphp5 curlをインストールするには?
- 21. Mac OSX Snow Leopardでアップデートした後のinstall.packages()の問題
- 22. OSX 10.6( "Snow Leopard")でARMアーキテクチャをエミュレートするには?
- 23. OSX Leopard上で正しくPHPUnitのと梨をインストール
- 24. OSX Leopard上の任意のJava 6アプリケーションでのキーボード入力
- 25. OSX Snow Leopardのグローバルショートカットを使用したシェルスクリプトの起動
- 26. HomebrewをMac OSX Snow Leopardにインストールするには?
- 27. GladeをMac OSX Leopardにインストールするには
- 28. osx-snow-leopardで作成され、osx-snow-leopardでアクセスされたpostgres 9.1.3データの制御ファイルのチェックサムが正しくありません
- 29. clangの機能名mangling
- 30. LeopardとSnow Leopardのpy2app作業ビルドをコンパイルしますか?