問題タブ [cl]
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.
c++ - MSVS と同じ設定を使用して cmd から cl.exe を実行するにはどうすればよいですか?
MSVS 2010 Express に C++ プロジェクトがあります。このプロジェクトを検証するために、いくつかの単体テストを作成する予定です。現在、彼らは次のように進んでいます。
これらのソース ファイルをプロジェクト外で作成しています。それぞれを個別の実行可能ファイルとして実行できるようにしたいのですが、Microsoft リンカでそれらをリンクするのに問題があります。
これはこれまでのところ私の問題です(CMD出力):
私は Microsoft 製品を実際に使用したことはありません。GNU ツール GCC と make の使用には慣れていますが、これには Microsoft ツールを使用する必要があり、それらがどのように機能するのかわかりません。
多分私はこれらのテストを愚かな方法で構築しようとしているのかもしれませんが、それは私が今考えることができる最良の方法です.
これは私がやりたいことです:
- プロジェクトのソース ファイルをオブジェクト ファイルにコンパイルする
- テスト ファイルをオブジェクト ファイルにコンパイルする
- テスト オブジェクト ファイルを適切なプロジェクト オブジェクト ファイルにリンクして、テスト実行可能ファイルを生成します。
どうすればそれを行うことができますか?(すべてを互換にするために設定する必要がある設定がいくつかあると思いますが、それらが何であるか、またはどのように設定するかはわかりません)
追加: デバッグ レベルについて言及していることは知っていますが、他の互換性のない設定があることは間違いありません。プログラムの設定を調べて、実行時に cl.exe に渡す方法はありますか?
編集:コマンド プロンプトと言うときは、すべての環境変数がセットアップされた Visual Studio に付属するものを意味します。
c++ - cl.exe を使用して静的ライブラリをリンクするにはどうすればよいですか? (RuntimeLibrary の指定)
結果は次のとおりです。
RuntimeLibrary を指定するにはどうすればよいですか?
visual-studio-2012 - nlopt が MSVC 2012 で cobyla.c をコンパイルできない
Web サイトから提供された Windows cmake ファイルを使用して Visual Studio Express 2013 でnloptをコンパイルしようとすると、サブディレクトリ内の構成を介して正常に動作しますが、次のエラー メッセージが表示されてコンパイルが失敗します。cmake -DCMAKE_BUILD_TYPE=Release -DNLOPT_BUILD_SHARED=On -G"NMake Makefiles" ..
build
nmake
64-bit - 「x86_amd64\cl.exe」を使用してコードをコンパイルして 64 ビット アプリケーションを生成しようとすると、エラー メッセージが表示される
「C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\x86_amd64\cl.exe」を使用して小さなコードをコンパイルして 64 ビット アプリケーションを生成しようとすると、このエラー メッセージが表示されました。
「アプリケーションまたは DLL c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\amd64\mspdb80.dll は有効な Windows イメージではありません。インストール ディスクでこれを確認してください」
c++ - MSVC でコンパイルされたマルチスレッド アプリが実行時に失敗する
提供された関数を周期的に実行するクラスを実装しました。
そして、これが機能するかどうかを確認するための簡単なプログラムです。
g++ でアプリをビルドすると、プログラムは問題なくビルドおよび実行されます。ただし、Microsoft のコンパイラ (v18) を使用すると、プログラムもコンパイルされますが、実行時に失敗します。
リリース構成を使用すると、スレッドの 1 つから次の例外が発生します。
Program.exe の 0x000007F8D8E14A30 (msvcr120.dll) で未処理の例外: 致命的なプログラムの終了が要求されました。
デバッグ構成を使用すると、Microsoft Visual C++ ランタイム ライブラリ エラーが毎秒表示されます。
デバッグ エラー!
プログラム: ...\path\Program.exe
R6010 - abort() が呼び出されました
両方の構成で:
タイマーのループの 2 回目の反復で、例外がスローされるか、エラーが発生し始めます。
呼び出されても、プログラムは
Tick
関数に一度も入りません。thread(handler)
エラー発生時のスタック トレースはこれら 2 つの構成で異なりますが、どちらにも私のコードからの情報は含まれていません。
ntdll.dll!UserThreadStart()
どちらも;で始まります。デバッグは で終わりmsvcr123d.dll!_NMSG_WRITE()
、リリースは で終わりmsvcr120.dll!abort()
ます。
問題が発生するのはなぜですか?また、アプリが MSVC でコンパイルされている場合にのみ発生するのはなぜですか? それはある種のMSVCのバグですか?それとも、コンパイラの構成で何かを変更する必要がありますか?
c - CL を使用して複数のファイルをコンパイルする
この GNU makefile は Windows でどのように見えますか (nmake と CL を使用する必要があります):
私が思いついたのはこれだけでした:
私の宿題はハッシュセットを実装していたことに注意してください。すべてのファイルでエラーが発生し続けます:予期しないファイルの終わり
c - _UNICODE & _MBCS が定義されていない場合でも、_tcslen は _mbslen の呼び出しになります。
ここで初めてのSOユーザー。
Unicode や utf-8 などの理解を深めようとしています。現時点では、Windows コマンド プロンプトから実行しています。
Visual Studio で見られる逆アセンブリのダンプを投稿しても問題ありませんか?
_MBCS が定義されている場合にのみ _mbslen が使用されるとドキュメントに記載されている場合、_tcslen(streng)
が への呼び出しにコンパイルされる理由がわかりません。_mbslen
でコンパイルしcl -Zi main.c
、devenv main.exe
_UNICODE も _MBCS も定義されていないことを確認できたらUINT cs = UC | UM;
(cs は 0xa です)。
UNICODE を定義する最初の行を削除し、コマンド プロンプトでコードページを 65001 に設定すると、ソース ファイルを utf-8 で保存するため、すべて正常に動作します。また、UNICODE 定義を保持しているwcslen(streng)
が、文字列内のハードコードとコード ポイントも機能します。これにより、たとえ _tcslen が wcslen になったとしても、Unicode コード ポイントを文字列にハードコードしない限り機能しないと思われます。しかし、それは本当のポイントではありません。コンパイラが wcslen ではなく _mbslen を呼び出す理由を知りたいです。
c - cl コンパイラでの C99 のコンパイル
Microsoft cl コンパイラ (Visual Studio 2013 に付属のコンパイラ) を使用しており、コンパイラに C99 をサポートするように指示するためにコンパイル時に使用するコマンドを探しています。