2

いくつかの C++ スタティック ライブラリと 1 つの WinRT ネイティブ スタティック C++ ライブラリを含む Windows 8 用の WinRT アプリケーションがあります。スレッドモデルライブラリに関連する複数定義されたシンボルについて不平を言っているため、リンクしていません:

vccorlibd.lib(tmmta.obj) : error LNK2005: "int __abi___threading_model" (?__abi___threading_model@@3HA) already defined in vccorlibd.lib(tmdefault.obj)
fatal error LNK1169: one or more multiply defined symbols found

MTA スレッド モデル ライブラリ (tmmta) とデフォルトのスレッド モデル ライブラリ (tmdefault) をリンクしようとしていることに注意してください。

これを変更するためのプロジェクト プロパティの設定が見つかりません。私が見つけた最も近いものは CLR スレッド属性ですが、この設定を変更しても効果はありません。ソリューションのどのサブプロジェクトがどのスレッド モデルを使用しているかわかりません。

スレッド モデルの設定を表示および変更する方法と場所を教えてください。

ありがとう!

4

1 に答える 1

5

これがあなたの質問に対する答えです。私は同じ問題を抱えていました:)

http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/f57406a6-3892-4981-86da-135862cf4b41?prof=必須

編集:

おそらくこれは、WinRT スタティック ライブラリにmain()関数または定義[Platform::MTAThread](witch create MTA symbol ) があるために発生します。実行可能コードは宣言について何も知らないため、実行可能コードはどのように初期化する必要があるかわかりません。

その関数を実行可能プロジェクトに移動するmain()か、(私の場合は魔女が機能します)メイン関数を宣言するオブジェクトにヘッダーを #include することを確認してください。そうすれば、リンカーはそれを認識し、シンボルを複製しません。

于 2012-08-31T07:45:23.030 に答える