2

我有一个适用于 Windows 8 的 WinRT 应用程序,其中包含多个 C++ 静态库和一个 WinRT 本机静态 C++ 库。它没有链接,因为它抱怨与线程模型库相关的多重定义符号:

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=required

编辑:

这可能是因为您在 WinRT 静态库中定义了main()函数或/和定义[Platform::MTAThread](女巫创建 MTA 符号)。现在可执行代码不知道应该如何初始化,因为可执行代码对您的声明一无所知。

您可以将该main()函数移动到您的可执行项目中,或者(在我的情况下是女巫)确保将 #include 标头添加到您声明主函数的对象,然后链接器可以看到它并且不会重复符号。

于 2012-08-31T07:45:23.030 回答