私はこの用語「シンボルをエクスポートする」を探していました。 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. データベースグリッドのシンボルは何を意味しますか?
- 2. MSILのシンボル<>は何を意味していますか?
- 3. これらのgitシンボルは何を意味しますか?
- 4. このシンボルはXcodeで何を意味しますか
- 5. このシンボルはC++で何を意味しますか? "〜"
- 6. このMSVCシンボルは何を意味しますか?
- 7. このシンボル()=>はJavascriptで何を意味しますか?
- 8. Javascriptでは ":"というシンボルは何を意味しますか?
- 9. NHibernate Profilerでシンボル[/]は何を意味していますか?
- 10. postgeqlでは '@>'シンボルの意味は何ですか?
- 11. Pythonのこれらのシンボルの意味は何ですか?
- 12. シンボルは何ですか! WebStormのgitインテグレーションの意味
- 13. このFirefoxシンボルは何を意味していますか?破れた紙の
- 14. シンボルの意味は何ですか?> PHPで
- 15. 意味論は何を意味しますか?
- 16. シンボルの意味:+:Scala?
- 17. TypeScriptでは 'エクスポート'の意味は何ですか?
- 18. このシンボルとは何ですか?:PHPでは意味がありますか?
- 19. IndexOutofRangeExceptionは何を意味しますか?
- 20. !viは何を意味しますか?
- 21. {login}は何を意味しますか
- 22. force_reloadは何を意味しますか?
- 23. コンパイラは何を意味しますか?
- 24. (+ var)は何を意味しますか
- 25. getActivity()は何を意味しますか?
- 26. グローバルステップは何を意味しますか?
- 27. "="は何を意味しますか
- 28. エラーメッセージは何を意味しますか?
- 29. *は何を意味しますか?
- 30. new()は何を意味しますか?
_declspec(dllimportの/輸出)のために見て、私はあなたが偉大な説明を見つけることができると確信しています。 –
また、質問は重複しているために下落していませんでしたが、恐らくあなたがSOによって提案された重複したものを無視したためです。 –
なぜそれがofftopicですか? – littleadv