質問

さまざまなライブラリが使用するランタイムライブラリのバージョンに同意していないため、私はVC ++リンカーに苦しめられたVC ++リンカーに苦しめられているようです。私はその陰鬱な主題を習得する気分になりません。だから私はそれが機能するまでそれを台無しにしようとします。エラーメッセージは決して役立ちません。また、このテーマに関するMicrosoftのドキュメントでもありません - 少なくとも私ではありません。

機能が見つからない場合があります - 名前のマングルが予想されていなかったためですか?時々、それはミックスアンドマッチを拒否します。それ以外の場合それはただ言う、 「リンク:警告lnk4098:defaultlib 'libcmtd'他のlibの使用との競合;使用 /nodefaultlib:ライブラリ」 /nodefaultlibを使用することは機能しませんが、警告は良性のようです。とにかく「defaultlib」とは何ですか?リンカーはどのように決定しますか?使用するランタイムライブラリをリンカーに指定する方法を見たことはありません。コンパイラに、どのライブラリを作成するかを伝える方法だけです。

オブジェクトファイルを検査してDLLが依存していることを確認できる「依存関係ウォーカー」プログラムがあります。私は自分が構築しようとしているプロジェクトで1つ走ったばかりで、それは本当の混乱です。競合するランタイムバージョンを必要とするシステム.libsと.dllがあります。たとえば、comctl32.dllはmsvcrt.dllを望んでいますが、msvcrtd.dllとリンクしています。入力しても、comctl32d.dllがあるかどうかを確認しています。

ですから、私が求めているのは、それらのことを整理する方法に関するチュートリアルだと思います。あなたは何をしますか、そしてどのようにそれをしますか?

これが私が知っていると思うことです。これが間違っている場合は、私を修正してください。

  1. パラメーターは、デバッグ/リリース、マルチスレッド/シングルスレッド、および静的/DLLです。可能な8つの組み合わせのうち6つのみがカバーされています。デバッグまたはリリースのいずれか、単一のスレッドDLLはありません。

  2. 設定は、どのランタイムライブラリがリンクされるか(およびそれにリンクするための呼び出し条約)のみに影響します。たとえば、DLLを構築している場合、DLLベースのランタイムを使用する必要はありません。また、プログラムのデバッグバージョンを構築するときにランタイムのデバッグバージョンを使用する必要はありませんが、単一の場合は役立つようです。過去のシステムコールを踏む。

ボーナスの質問:どのようにして誰や会社もそのような混乱を生み出すことができますか?

役に立ちましたか?

解決

これは間違った質問に対する答えを見つけようとしているような少しのようです、そして/または車輪を再発明するようです。PHPは致命的なエラーをスローするときにあなたのチェックを行います。

そのように見たいのなら、コードは実際にはすでに機能します。致命的なエラーが発生します。したがって、親クラスは存在しません。したがって、コードを修正する必要があります。親クラスが見つからないことを確立した、他に何をするつもりですか?あなたはまだそれを修正する必要があります。

私が言おうとしていることは、あなたが致命的なエラーを取り除くことができないならば、それはどこにでもあなたを得ることはない - あなたのコードはまだ不完全であり、そしてラインをさらに下げる可能性があります。あなたはユーザーに「問題を抱えている」をエコーすることができますが、それがPHPはすでに何をしているかです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top