Webrtcが出会ったときITERATOR_DEBUG_LEVEL

1757 ワード

webrtcをコンパイルするのは難しいです.アクセスするツール、コード倉庫などが容易ではありません.コンパイルが完了したら、webrtc.libをプロジェクトに統合すると、この問題に直面する可能性があります.
error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj

もし中国語版のVC++を使っていたら、間違った情報はこうです.
error LNK2038:    “_ITERATOR_DEBUG_LEVEL”     :  “0”    “2”(main.obj  )   

しかし、Releaseモードでリンクをコンパイルするとこのエラーはありませんよ.
検索すると、「現在のプロジェクトはDebugバージョンであり、参照されているライブラリファイルはReleaseバージョン」であることがわかります.その後、Debugバージョンのwebrtcd.libをコンパイルします.しかし、このエラーがあります.この場合、ネット全体で検索しても正解が見つかりませんが、プロジェクトで_ITERATOR_DEBUG_LEVEL=0を定義する不完全な答えが見つかる可能性があります.リンクエラーはありませんが、実行すると突然クラッシュし、プロセスが終了し、開発とデバッグに影響します.
私はgn args --list 命令の数百のパラメータをめくって、目を使って、やっとこの問題を徹底的に解決しました.これは私がここに書いた理由です.読者がここで早く解決策を見つけてほしいからです.webrtcをコンパイルするときは、DebugとReleaseの2つのバージョンを分離することを強くお勧めします.デフォルトのコンパイルパラメータはReleaseです.方法は、Debugバージョンの生成時にgn gen out/Debug --args="is_debug=true"を実行し、Releaseバージョンの生成時にgn gen out/Release --args="is_debug=false"を実行する.
ここでargsパラメータを引き出して嬉しいですが、実はis_debug以外にも多くのパラメータを加えることができます.前述したように、数百個あります.コマンドラインを通じて多くのパラメータが渡されると、うんざりします.だから、gnはパラメータファイルをサポートしています.よく探してみると、out/Debugout/Relaeseargs.gnファイルがあります.メモ帳で開くと、前に渡されたis_debug=trueパラメータがちょうどよく横になっています.
本題に戻ると、_ITERATOR_DEBUG_LEVELが一致しない解決策は、Debugバージョンのargs.gnenable_iterator_debugging=trueパラメータを書き込み、gn gen out/Debugを実行してファイルを再生成し、ninjaコンパイルを呼び出すことである.
ただし、Releaseバージョンではこのパラメータを追加しないでください.