私はこの用語「シンボルをエクスポートする」を探していました。 C/C++やライブラリ(共有/静的)に関するシンボルの意味は何ですか?どこからシンボルをエクスポートするのですか?なぜですか?シンボルをコンパイラによってmanglingする名前とのエクスポートの関係は何ですか?シンボルのエクスポートは何を意味しますか?
答えて
は、シンボルをエクスポートすると、オブジェクト・ファイル/ライブラリにある「広告」その存在を意味し、それがどこにあるか、それをインポートすることができるように、他のモジュールで(=にリンクされています)。
は、リンクは静的または動的に行うことができますが、それがどこにあるかのいずれかの方法は、リンカはシンボルが何であるかを知っている必要があり、そして、それが起こることをするためにエクスポートシンボルとインポートされたシンボルが一致する必要があります。名前マングリングはそれに関連しています(C++の名前マングリングはシンボル名にシンボルの型定義を含みます。また、インポートおよびエクスポートされたシンボルのマングリングはリンカーがインポート・エクスポートを正しくリンクするためにマッチする必要があります)。
例:
あなたは、ライブラリ "STANDARDC"(ランダムな名前)とあなたのプログラムSOMEPROGがあるとします。プログラムSOMEPROGはコンソールに出力する必要があるので、printf
を呼び出します。しかし、プログラムSOMEPROGに実際にprintf
を実装していないのですが、実装は他の場所で実装されています(= import)。
ライブラリSTANDARDCは、それがそのライブラリに実装されており(=エクスポートされた関数)外部から呼び出すことができるすべての関数を含むエクスポートシンボルのリストを有しています。 printf
はそのような関数の1つで、エクスポートされたリストに表示されます。
コンパイラはSOMEPROG.Cを通過し、あなたがprintf
を参照することを見て、それのための実装はありません。コンパイラは、結果のSOMEPROG.objのインポートされたシンボルのリストにprintf
を追加します。
リンカはSOMEPROG.objファイルとSTANDARDC.libファイルを取得し、どの機能がSOMEPROG.objで使用されていますか。リンカは、それがインポートされ、printf
が実装されていないことを見つけたので、リンカはそれが持っているすべての.libファイルを通して見るとSTANDARDCのエクスポートリストにprintf
に一致する検索します。 STANDARDCからprintf
の実装が取り込まれ、インポートされたシンボルprintf
を参照するあらゆる場所でプログラムにリンクされます。
- 1. このMSVCシンボルは何を意味しますか?
- 2. これらのgitシンボルは何を意味しますか?
- 3. データベースグリッドのシンボルは何を意味しますか?
- 4. このシンボルはC++で何を意味しますか? "〜"
- 5. MSILのシンボル<>は何を意味していますか?
- 6. NHibernate Profilerでシンボル[/]は何を意味していますか?
- 7. Pythonのこれらのシンボルの意味は何ですか?
- 8. このFirefoxシンボルは何を意味していますか?破れた紙の
- 9. getActivity()は何を意味しますか?
- 10. (+ var)は何を意味しますか
- 11. IndexOutofRangeExceptionは何を意味しますか?
- 12. UnmappableCharacterExceptionは何を意味しますか?
- 13. バックスラッシュは何を意味しますか?
- 14. {}は何を意味しますか?
- 15. new()は何を意味しますか?
- 16. 「ネットワークパフォーマンス」は何を意味しますか?
- 17. javascript:voidは何を意味しますか?
- 18. 「秘密鍵のエクスポート」とは何を意味しますか(Makecert -pe)?
- 19. Scalaのシンボル「That」の意味
- 20. PLSQLシンボルの意味 "=>"
- 21. NSDecimalAdd() - constの意味は何を意味するのですか?
- 22. MYSQLI_NUMは何を意味し、何をしますか?
- 23. Bash: '$(())'は 'expr'を意味し、 '[]'は 'テスト'を意味しますか?
- 24. アーキテクチャarmv7の未定義シンボルですか?このエラーは何を意味しますか?
- 25. 客観的な意味での意味は何ですか?
- 26. "スクリプト名シンボル"とは何ですか?emacsのset-fontset-font関数を意味しますか?
- 27. [...]はPythonの出力として何を意味しますか?
- 28. 空の "Expect:"ヘッダーは何かを意味しますか?
- 29. 0x0Fは何を意味していますか?そして、このコードはどういう意味ですか?
- 30. 0LLまたは0x0ULは何を意味しますか?
_declspec(dllimportの/輸出)のために見て、私はあなたが偉大な説明を見つけることができると確信しています。 –
また、質問は重複しているために下落していませんでしたが、恐らくあなたがSOによって提案された重複したものを無視したためです。 –
なぜそれがofftopicですか? – littleadv