2009-04-08 9 views
11

私はデフォルトでCRTバージョン9 を使用するCOM dllの開発にVS2008を使用していますが、新しいCRTと互換性のないTSF(テキストサービスフレームワーク)を使用しています。私は、解決策は互換性のあるものを使用することだと思います。どのようにしてCRTのバージョンを指定できますか?特定のCRTバージョンを使用するためにC++コンパイラを強制する方法?

+0

前の回答を参照してください:http://stackoverflow.com/questions/693250/vs-2008-link-against-older-c-runtime –

答えて

10

私は全員、ではなく、に参加して、あなたがリンクしている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):

2

最も簡単な方法は、TFSと互換性のあるCRTを使用するVC++バージョンでDLLを構築することです。

同じバージョンのヘッダーファイルを使用しない限り、DLLをCRTの別のバージョンとリンクすることはお勧めできません。そして、それを行う最も簡単な方法は、あなたはまだ試してみたい場合は

は、あなたがすることができます...右VC++のバージョンを使用するようになります。

  • が行くまで「コンフィギュレーション設定 - >リンカー - >入力 - >「特定のライブラリを無視する」を選択し、使用しているcrt(libc.lib、libcmt.libなど)を入力します(詳細はcode project articleを参照してください)。
  • 「構成設定 - >リンカ - >入力 - >その他の依存関係」で使用するcrtバージョンの名前と、「構成設定 - >リンカ - >一般 - >追加ライブラリディレクトリ」のパスを入力します。

「ツール - >オプション - >プロジェクトとソリューション - > VC++ディレクトリ - >ライブラリファイル」のデフォルトディレクトリを変更することもできます。多分あなたのCRTの他のバージョンが存在するパスに$(VCInstallDir)libを変更してください。

0

別のバージョンのCRTにVS9を使用したりリンクしたりしないでください。

あなたのアプリが別のCRT、たとえばVS8のCRTにリンクする必要がある場合は、&をVSのそのバージョンでコンパイルする必要があります。

+0

CRTにリンクできない正確な理由は何ですか?あなたは詳しく説明できますか? –

0

ソリューションは、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は一致する必要があります...そして、これはその場所で起こります。

関連する問題