プロが教える店舗&オフィスのセキュリティ対策術

過去の資産にアクセスするためにC#から使うクラスライブラリをC++/CLIで作成しています。

当初は.NET Framework 4.5で作成していたのですが、Windows7でFrameworkを追加するのが面倒くさいという事で、3.5でプロジェクトを起こし直してコンパイルしました。
そうしたところ、大量のリンクエラーが発生しました。

--抜粋(下記を含め、合計18行のエラー)
VCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata は、COFF シンボル テーブルと整合しません:
LINK : error LNK2034: metadata は、COFF シンボル テーブルと整合しません
MSVCMRTD.lib(locale0_implib.obj) : error LNK2020: 未解決のトークン (0A0000A1) "extern "C" double __cdecl _hypot(double,double)" (?_hypot@@$$J0YANNN@Z)
--

調査した結果、fstream関連を定義するとこの症状が出る事がわかりました。

そこで、単純に以下のプロジェクトを作成したところ、同じ現象が発生しました。

1..NET Framework 3.5でCLRクラスライブラリのプロジェクトを作成する(ここではTESTプロジェクト)
2.作成されたテンプレートの「TEST.h」に関数を追加する
-----(TEST.h)
// TEST.h
#pragma once
#include <fstream>
using namespace System;

namespace TEST {
public ref class Class1
{
void test()
{
std::fstream f;
}
};
}
----
3.コンパイル → リンクエラー

標準関数はいくつか使っているのですが、fstream系だけがダメなようです。
(sstreamはOKでした)

これに関して、何か対策方法はないものでしょうか。

情報があればお教え下さい。

よろしくお願いいたします。

開発環境:
Windows 8.1
VisualStudio 2013 Pro

A 回答 (2件)

VS2013は持っていませんが、VS2012ではC++/CLIと互換性のあるC++ランタイムの


プラットフォームツールセットはv110_xpのようです。

VS2013の場合はv120_xpでしょうか?

プロジェクトのプロパティ→構成プロパティ→全般→プラットフォームツールセット

の値を v120からv120_xpに変更すればビルドできるようにならないでしょうか?
    • good
    • 0

以下の「stream関連で仕様変更された部分に関連したQ&A」が参考になるでしょう。


http://support.microsoft.com/kb/154419/ja

この回答への補足

情報有り難うございます。

当該情報について確認させて頂きましたが、開発環境バージョンが異なる為、残念ながら参考とはなりませんでした。
また、試しに昔の環境(VisualStudio2008+Windows7)でビルドしたところ、問題なくビルドする事が出来ました。

OSと開発環境のどちらに問題があるのかわからないですが、ソースコード自体は問題ないのではないかと思っています。

補足日時:2014/05/26 14:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!