我决定从现在起开始使用RELEASE而不是DEBUG。
我已经将Debug的相同目录/路径/附加blabla复制到了Release中,以摆脱“”未定义...问题“”
但我仍然有以下错误/警告:
Error 3 error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '1' in ex4.obj C:\...\ex\qtmaind.lib(qtmain_win.obj)
Warning 4 warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library C:\...\ex\MSVCRT.lib(cinitexe.obj)
Error 5 error LNK1319: 1 mismatches detected C:\...\Win32\Release\\ex.exe 1
你能帮我解决一下吗?
答案 0 :(得分:1)
使用MSVC在Debug和Release版本之间进行更改时,需要更改链接到的C运行时版本。即改变/MDd
- > /MD
或/MTd
- > /MT
答案 1 :(得分:0)
在项目中混合_ITERATOR_DEBUG_LEVEL确定了灾难的秘诀:你可以获得随机的崩溃,内存损坏等等。不要去那儿。在某些情况下,链接器很适合你,不幸的是,缺少警告可能会让你有问题。
唯一真正的解决方法是使用统一选项进行编译。 (当然包括_ITERATOR_DEBUG_LEVEL,但其他设置也可能导致问题。)
问题的根源在于您包含的标题包含#if部分,因此使用不同的设置编译不同的代码。这称为违反ODR ,即一个定义规则。这会以未定义的行为惩罚您,甚至不需要诊断。
一个例子,代码的一部分可能认为向量大小为16字节,其他24字节。迭代器的指针位于偏移量0,其他指针位于偏移量8。
如果mix是绝对必须的,你需要仔细考虑程序的防火墙部分,以便它们不会直接从标准库共享对象,只能通过轻量级接口绑定,每个人只处理其私有数据。