私はデフォルトでCRTバージョン9 を使用するCOM dllの開発にVS2008を使用していますが、新しいCRTと互換性のないTSF(テキストサービスフレームワーク)を使用しています。私は、解決策は互換性のあるものを使用することだと思います。どのようにしてCRTのバージョンを指定できますか?特定のCRTバージョンを使用するためにC++コンパイラを強制する方法?
答えて
私は全員、ではなく、に参加して、あなたがリンクしているCRTのバージョンを手動で変更してください。しかし何らかの理由で(これは想像がつきませんが)これがあなたのための正しい行動コースであれば、あなたのプロジェクトのためにmanifestを変更することができます。
まず、マニフェストがではないことを確認してくださいすべてのビルドで生成された:それはあなたの手動変更が上書きされるように、(VS2005の構成プロパティ/リンカ/マニフェストファイル/マニフェストの生成)。また、分離が有効になっていることを確認してください。 次に、マニフェストファイルを探します。これは$(IntDir)にあるはずです(たとえば、デバッグ)。 -
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
(もちろんデバッグビルド用)のセクションが表示されます。 CRT要素のversion属性とpublicKeyToken属性を編集する必要があります。 ローカルのWINDOWS \ WinSxSフォルダにあるファイルを調べて、利用可能なバージョンを確認できます。 hereあなたが望むバージョンを見つけたらpublicKeyTokenを抽出する方法をチェックしてください。 (私は最初に、他のプロジェクトのマニフェストを直接見て、希望のCRTバージョンとリンクしていますが)。
もしあなたがそこに行けば、いくつかの荒い水を期待してください。あなたのアプリケーションが他のSide-by-Sideコンポーネント(MFC、OpenMPなど)とリンクしていないコンソールアプリケーションである場合は、多少の運があるかもしれません。あなたのアプリケーションが自明ではない場合、SxSコンポーネントを含む複雑なバージョンの依存関係がない場合、私は驚くでしょう。
(編集)使用している特定のCRTもアプリケーションに配布する必要があります。ここでそれをしたのはsomeoneです。
1):
最も簡単な方法は、TFSと互換性のあるCRTを使用するVC++バージョンでDLLを構築することです。
同じバージョンのヘッダーファイルを使用しない限り、DLLをCRTの別のバージョンとリンクすることはお勧めできません。そして、それを行う最も簡単な方法は、あなたはまだ試してみたい場合は
は、あなたがすることができます...右VC++のバージョンを使用するようになります。
- が行くまで「コンフィギュレーション設定 - >リンカー - >入力 - >「特定のライブラリを無視する」を選択し、使用しているcrt(libc.lib、libcmt.libなど)を入力します(詳細はcode project articleを参照してください)。
- 「構成設定 - >リンカ - >入力 - >その他の依存関係」で使用するcrtバージョンの名前と、「構成設定 - >リンカ - >一般 - >追加ライブラリディレクトリ」のパスを入力します。
「ツール - >オプション - >プロジェクトとソリューション - > VC++ディレクトリ - >ライブラリファイル」のデフォルトディレクトリを変更することもできます。多分あなたのCRTの他のバージョンが存在するパスに$(VCInstallDir)libを変更してください。
別のバージョンのCRTにVS9を使用したりリンクしたりしないでください。
あなたのアプリが別のCRT、たとえばVS8のCRTにリンクする必要がある場合は、&をVSのそのバージョンでコンパイルする必要があります。
CRTにリンクできない正確な理由は何ですか?あなたは詳しく説明できますか? –
ソリューションは、Visual Studio Expressの2013コンパイルのx64 + OpenCVの2.4.9のx64、デバッグと私のために働いたが、それは他のVS-バージョンのために働く必要があります(私はLV2013のx64にすることを一体化しました)ソリューション>プロパティ>デバッグソースファイルを右クリックしてください... C:\ Program Files(x86)\ Microsoft 2つのエンティティがあります。 Visual Studio 12.0 \ Common7 \ IDE \ vc7 \ atlmfc C:¥Program Files(x86)¥Microsoft Visual Studio 12.0¥Common7¥IDE¥vc7¥crt
これらはVisual Studio 2013 Expressでも動作しますが、他の2013でも動作するはずです。Visual Studio 10または11を使用している場合は、それぞれに「Microsoft Visual Studio 11.0」または「10.0」と入力します。追加することもできます。
これらのエントリは、ソリューション>プロパティ>デバッグソースファイル(上記の説明)のOpenCV.slnから取得できます。すでに述べたように、CRTは一致する必要があります...そして、これはその場所で起こります。
- 1. Eslint:特定のESバージョンを使用するように強制する
- 2. 特定のコンパイラ生成変数を特定のELFセクションに強制する
- 3. ./特定のコンパイラを使用するための設定
- 4. CMakeで特定のMPIコンパイラを強制する
- 5. MSVC CRT DLLの特定のバージョンを強制するためにEXEまたはDLLマニフェストを書き直すのは安全ですか?
- 6. 特定のバージョンのPythonランタイムの使用を強制する方法はありますか?
- 7. 私のアプリにDLLの特定のバージョンを使うように強制する
- 8. 特定のサーバーに接続するためのPrincipalContextの強制
- 9. .NETの.NETバージョンを指定する方法4 MicrosoftのC#コンパイラ?
- 10. 文字列に特定のカルチャを強制する方法#
- 11. Linux/CentOS:特定のイーサネットアダプタをFTP/SSHに強制する方法
- 12. PHPが特定の数値を強制的に使用する
- 13. 強制的に特定の型定義された型を強制する
- 14. ノードnpm install、特定のバージョンをインストールするために依存関係を強制する
- 15. InSpecテストを特定のOSバージョンに制限する方法
- 16. 特定のフォーマットの構文強調を適用するためにtextmateに強制しますか?
- 17. FFMPEGを使用して固定ビットレートを強制する方法
- 18. 派生したインターフェイスを強制的に使用する方法
- 19. 特定のMBeanServerを使用するようにSpringのMBeanExporterを強制する
- 20. 特定のlibcurl.dylibを使用するようにOS Xアプリケーションを強制する
- 21. バージョンを確認するMacパッケージインストーラを強制する方法は?
- 22. cURL-カールに特定のネットインターフェイスを使用するように強制する方法はありますか
- 23. htaccessを使って特定のディレクトリをHTTPに強制する
- 24. MSBuildのバージョンを強制するには?
- 25. TFSビルドでナゲットをパックするときに特定のバージョンのパラメータを強制的に適用する
- 26. Cで未使用の変数のコンパイラ警告を抑制する方法は?
- 27. SQL Serverログインのためのnolockヒントを強制する方法
- 28. LocalDBに特定のバージョンを使用させる方法
- 29. 特定のC++コンパイラでrestrict修飾子を使用したコンパイラエラー
- 30. クラスフィールドを埋めるためにHibernateコールセッターメソッドを強制する方法は?
前の回答を参照してください:http://stackoverflow.com/questions/693250/vs-2008-link-against-older-c-runtime –