問題タブ [msvcrt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
634 参照

64-bit - Windowsで複数のリンクされたCランタイムを検出する

Windows(64ビット)で作業しているプロジェクトの1つに問題があります。プログラムがクラッシュすることもあれば、クラッシュしないこともあります。この問題は、複数のリンクされたCランタイムに関連していると思われます。Windowsでこれを検出するにはどうすればよいですか?依存.exeを試してみましたが、CRTが報告されませんでした

0 投票する
1 に答える
6282 参照

c++ - MSVCP80.dll が見つかりません (サイド バイ サイドの問題ですか?)

Visual Studio 2005 (SP1) からプロジェクトのリリース バージョンを開始しようとすると、次のエラー メッセージが表示されます。

「MSVCP80.dll が見つからなかったため、このアプリケーションは開始できませんでした。アプリケーションを再インストールすると、この問題が解決する可能性があります」

リリース バージョンのマニフェストを見ると、次のように指定されています。

Windows/WinSxS フォルダーを見ると、次のバージョンの CRT があります。

これらのすべてのフォルダーには、必要な dll が含まれています。私の固定コンピューターでは、まったく同じバージョンの Visual Studio を使用して、すべて正常に動作します。

これがキッカーです。問題が表面化する前に、リリースとデバッグの両方でプログラムを1回だけ開始することができました。debug-build からの出力は、WinSxS からの DebugCRT .762*-dll が最初に読み込まれたことを示していました、プログラムを開始しようとすると、これらの dll が見つかりません。

外部依存関係は ws2_32.lib だけです。

ラップトップにすべて(Windows XP、ビジュアルスタジオ、サービスパックなど)を再インストールしましたが、役に立ちませんでした。

ws2_32.lib への参照を削除すると、プログラムが起動します。

助けてください、新しいラップトップを窓から投げ捨てようとしています :(

敬具

アンドレアス・ブリンク

0 投票する
4 に答える
26895 参照

windows - アプリケーションと一緒に msvcrt.dll を再配布する必要がありますか?

アプリケーションのライブラリの一部が msvcrt.dll に動的に依存している場合、アプリケーションと共に msvcrt.dll を再配布し、プライベート DLL を使用する必要がありますか? つまり、システムの msvcrt.dll (dll 地獄) との非互換性の問題はありますか? アプリケーションは、Windows Server システムを対象としています。

0 投票する
1 に答える
1763 参照

c - Cベースのコンソールアプリはcmd.exeから実行するとクラッシュしますが、VS2008デバッガーでは正常に実行されますか?

ここで何が起こっているのかわからない。
Cで記述されたWindowsコンソールアプリがあります。VS2008内から実行すると、正常に実行されます。cmd.exeプロンプトから実行すると、通常はmalloc()でクラッシュします。CRTライブラリの不一致による競合状態だと思います。

アプリはシンプルです。
WinHttpレイヤーを呼び出してGETリクエストをWebサイトに送信し、応答を丸呑みにします。その部分は正常に機能しているように見えますが、WinHttpReadDataの後、プログラムはprintf()を呼び出して受信したデータを出力します。そこで、mallocのクラッシュが頻繁に発生します。

ただし、デバッガーの外部でのみ。????

コマンドラインからコンパイルしています。

/ MTでコンパイルするか、何もしない場合、上記の結果が表示されます。/ MDを使用してコンパイルすると、デバッガーでfree()を呼び出すとハングし、cmd.exeでクラッシュします(/ MTと同じ)。

いくつかの質問 -

  1. VS2008内で利用可能なPATHのために、異なる動作はありますか?

  2. マシンにVC90ランタイムがインストールされていないことが原因でしょうか?

  3. 静的にリンクする(/ MT)ことで、VC90ランタイムをインストールする必要がなくなると思いましたか?

  4. 私はまだ/NODEFAULTLIBを理解していません。それは関係がありますか?

私はファイルやコンパイラを作成するのに慣れていて、Cを知っています。C++を知らないので、Cで記述しています。しかし、Windows上のCRTのすべての気まぐれを理解していません。誰かがこの謎を解くことができますか?

0 投票する
1 に答える
2657 参照

python - ctypes の msvcrt の異なるバージョン

Windows では、ctypes.cdll.msvcrtctypes モジュールをインポートするとオブジェクトが自動的に存在し、docs に従ってmsvcrtMicrosoft C++ ランタイム ライブラリを表します。

ただし、 find_msvcrt関数もあることに気付きました"return the filename of the VC runtype library used by Python"

さらに、次のように述べています。"If you need to free memory, for example, allocated by an extension module with a call to the free(void *), it is important that you use the function in the same library that allocated the memory."

ctypes.cdll.msvcrtだから私の質問は、私がすでに持っているライブラリとfind_msvcrt関数でロードできるライブラリの違いは何ですか? どのような特定の状況下で、それらが同じライブラリではない可能性がありますか?

0 投票する
3 に答える
32975 参照

msvcrt - サイド バイ サイド構成エラー (Microsoft.VC80.CRT v8.0.50608.0)

次のマニフェストが埋め込まれたアセンブリがあります。

私のマシンの 1 つで、このアセンブリが機能しません (アセンブリの読み込みに失敗します)。これを依存関係ウォーカーで開くと、次のエラー メッセージが表示されます。

同じアセンブリが別のマシンで正常に動作し、依存関係ウォーカーでエラーが発生しません。

私が解決できる限り、問題は最初のマシンに何らかの依存関係 (MSVCR 再頒布可能パッケージなど) がないことが原因ですが、既に確認済みで、Microsoft Visual C++ 2005 再頒布可能パッケージは両方のマシンに正常にインストールされています。

不足している依存関係を特定するにはどうすればよいですか?

私が気付いた唯一のことは、作業中のマシンの WinSxS ディレクトリに追加のエントリがあることです。

0 投票する
1 に答える
2183 参照

windows - 静的にリンクされたCRTが多すぎる場合のfls制限を回避しますか?

LoadLibraryを介して(制御下にない)外部DLLをロードすると、それらのDLLで静的にリンクされたCRTがファイバーローカルストレージの割り当てに失敗するという問題が発生します。これはmskb193462に似ていますが、これがFLSであり、128個しかない点が異なります。

問題を回避するための便利な方法はありますか?CRTはGetProcAddressを使用してFlsAllocを検索しています(XPには存在しなかったようです)ので、本当に必要ですか?

(これは、FlsAllocが実際に存在するVista上にあります。DLLはMSVC8を使用しているようです)

0 投票する
2 に答える
1913 参照

visual-c++ - アプリケーションが静的および動的にリンクされたCRTを混合する理由をどのように見つけることができますか

続く長い投稿でごめんなさい。

Microsoftが提供する静的リンクと動的リンクのCランタイムとC++ランタイムを混在させるのは良い考えではないことを私は知っています。残念ながら、私たちのアプリケーションはすでにそれらを混ぜ合わせており、それを修正しようとしています。さまざまな理由(MSIに慣れていないこと、MSMを十分にサポートしていない可能性のあるNSISを使用していること、時間とリソースの不足など)により、CRTを動的ではなく静的にリンクすることにしました。これが良い考えではない理由は知っていますが、今のところ私たちが選んだのです。


私たちのコードは、ほとんどが標準のC ++であり、他の多くのオープンソースライブラリによって補完されています。

アプリケーションの構造は次のとおりです。静的ライブラリを生成するさまざまなモジュールは、それ自体がリンクされてさまざまなものを作成し、その中で1つの実行可能ファイルが問題を引き起こします。

リリースでは、すべてのコードを/MTでビルドします。一部のオープンソースライブラリでは、プリコンパイルされたバイナリを使用し、一部は/ MDでプリコンパイルされたdllであったため、ランタイムが混在していました。そこで、それらを/ MTで再コンパイルし、dllではなく静的ライブラリを作成しました。この変換はライブラリごとに行われないため、/MDを使用するいくつかのdllとリンクします。


その結果、depends.exeでは、1つの実行可能ファイルを除くすべてのものがmsvcr80.dllまたはmsvcp80.dllに直接依存していません。直接依存しないということは、msvcr80.dllがdepends.exeによって示されるツリーのルートの子ではないことを意味します。ライブラリdllの1つによってプルされたmsvcr80.dllが見つかることもありますが、それはツリーのより深いレベルです。

その1つの厄介な実行可能ファイルの最初のレベルにmsvcr80.dllがある理由を知るにはどうすればよいですか?その実行可能ファイルをmsvcr80.dllに直接リンクする理由は何ですか?

1つの理由は、リンクが/MDを使用してCRTと動的にリンクするライブラリAに静的にリンクしていることである可能性があります。したがって、ライブラリAのコードは実行可能ファイルに含まれるため、実行可能ファイルはmsvcr80.dllにリンクします。しかし、どのライブラリがそれを行っているかをどのように知ることができますか?


私がこれまでに試したこと:

  • 静的にリンクされた.libファイルをdepends.exeにロードする->depends.exeは静的ライブラリではなく実行可能ファイルまたはdllを想定しているため、機能しません
  • 静的にリンクされた.libファイルでdumpbin.exe/DIRECTIVESを使用します->それらのいずれもmsvcrt80.dllを表示しませんでした(デバッグ中、すべてに/ MDdを使用しようとすると、msvcrt80d.dllが表示されたため、メソッドは良いです。静的にリンクされたすべてのオープンソースライブラリが/MTで正しくコンパイルされていることを証明します)
  • / VERBOSE:LIBリンカーフラグを使用します->実際にmsvcr80.dllのインポートライブラリであるmsvcrt.libをプルしていることを示したため、問題が発生しましたが、なぜそれが行われているのかはわかりませんでした
  • VisualStudioで/VERBOSEリンカーフラグを使用します+追加の依存関係libcmt.lib+すべてのデフォルトライブラリを無視しますYES+特定のライブラリを無視します:msvcrt.libを削除するか、誰がそれをプルするかを確認するために必死に試みます。結果は私を困惑させました:

私が理解している限り、libcmt.libのtypinfo.objはシンボルを参照し、msvcrt.libで検索し、ti_inst.objで見つかった後、2回定義されているというエラーをスローします。しかし、これは意味がありません。libcmt.libにすでにシンボルがある場合、なぜmsvcrt.libでそれを検索し、実行可能ファイルにmsvcr80.dllをもたらすのでしょうか。そして、より一般的には、静的ライブラリが動的インポートライブラリでシンボルを検索するのはなぜですか?Ignore固有のライブラリにmsvcrt.libがある場合、リンカがmsvcrt.libを参照するのはなぜですか?

お待ち頂きまして、ありがとうございます :-)。