問題
リンクがどのように機能するかについての詳細な情報はほとんどありません。また、IDEはコンパイルの詳細を非表示にします。これは、プロジェクトにリンク関連の問題がある場合に非常に苦痛です。
通常、C++の本は私にそれを教えてくれます
C++ code --> preprocessed c++ code --> object code
しかし、リンクエラーが一般的であるという事実にもかかわらず、平均的な開発者がリンクについて知っておくべきことについては、実際にはあまり詳しく説明していません。新しいC++プログラマーは、次のようなエラーに対処する方法をどのように知っている必要がありますか?
XmlRpcSocket.o:XmlRpcSocket.cpp:(.text+0x48b): undefined reference to `WSAGetLastError@0'
しかし、この質問は特にこの問題に関するものではありません(-lwsock32はそれを解決します)。問題は、リンクに関する一般的な知識が不足していることです。私の大学のC++講師は、いくつかのブラックボックスが付いた1つのスライドの時間のリンクについて話しました。
また、リンクがどのように機能するかに関するリソースは不足しており、私が知っているほとんどの人は、リンクをブラックボックス操作と見なしています。リンクについて私が学んだことは、実験を通して、ちょっと「途中でそれを拾い上げた」ということですが、このアプローチの問題は、それが答えるよりも多くの質問を提起することです。
例:.LIBファイルはオブジェクトファイルのバンドルであるライブラリファイルであることを私は知っています。では、.LIBファイルをどのようにビルドして使用する必要がありますか?.LIBファイルを使用することが望ましいのはいつですか。静的な.LIBファイルまたはDLLを参照するファイルをいつ作成する必要がありますか?.LIBファイルをオブジェクトファイルにリンクすると、すべてがコピーされますか、それとも使用するオブジェクトファイルだけですか?静的にリンクするのではなく、いつDLL / soファイルを作成する必要がありますか?一般的な問題を解決するには、オブジェクトファイルの内部構造について学ぶ必要がありますか?名前マングリングについて何を知っておく必要がありますか?それはいつ関連しますか?dllの1つが古いmsvcrtをロードする場合、いくつかの異なる標準ライブラリをプロジェクトにリンクできますか?等
質問
明らかに、私は上記のすべての質問に一度に答えることを期待していません。どこから始めればいいのかを知る必要があります。リンクについて説明している「すべてのプログラマーがメモリについて知っておくべきこと」のようなリソースはありますか?ですから、私は学ぶためのリソースと、リンクプロセスについて学ぶためにどの方向に進むべきかについてのあなたの洞察が必要です。
すべての開発者がリンクについて知っておくべきことは何ですか?