使用静态C++ lib的Windows 8 WinRT应用程序具有vccorlibd的多重定义符号

djc*_*uch 2 multithreading windows-8 windows-runtime c++-cx

我有一个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
Run Code Online (Sandbox Code Playgroud)

请注意,它正在尝试使用默认的踩踏模型lib(tmdefault)链接MTA线程模型lib(tmmta).

我无法在项目属性中找到任何设置来更改此设置.我发现最接近的是CLR线程属性,但更改此设置无效.我不知道我的解决方案中的哪个子项目正在使用哪个线程模型.

如何以及在何处可以查看和更改线程模型设置?

谢谢!

小智 5

这是关于你的问题的答案.我有同样的问题 :)

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

编辑:

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

您可以将该main()函数移动到您的可执行项目或(在我的情况下工作)确保您#include标头到您声明主函数的对象,然后链接器可以看到它并且不会复制符号.