Closed augustheart closed 5 years ago
看错误信息 应该是 include出了问题。 因为明显可以看到 main.cpp的头文件 不是VC-LTL的。
建议你的检查下include顺序,另外实在不知道的话 不妨加QQ群。
除了多了那个标准库里面的atomic,如上的代码已经是一个wtl程序最基本的构造了,atl的头文件atlbase.h是一定需要在wtl头文件atlapp.h之前的。include方面应该没有可调的余地了。这段代码基本上已经无法再做任何修改,再改就要改到atl或是wtl里面去了。所以这个情况就比较诡异了。 这个代码在4.0之前也就是那个使用MD模式编译的版本是正常的
除了多了那个标准库里面的atomic,如上的代码已经是一个wtl程序最基本的构造了,atl的头文件atlbase.h是一定需要在wtl头文件atlapp.h之前的。include方面应该没有可调的余地了。这段代码基本上已经无法再做任何修改,再改就要改到atl或是wtl里面去了。所以这个情况就比较诡异了。 这个代码在4.0之前也就是那个使用MD模式编译的版本是正常的
我的意思是include变量,不是include<>,实在是是听不懂的话,加QQ群吧,让我看看include应该能解决了。
应该就是include变量中目录顺序存在问题,本地 测试 未遇到此问题。
解决方案 不妨参考 4.1. 未共享到msvcrt.dll
另外需要注意,VC-LTL 相关文件顺序必须在微软相关文件之前。
比如说,我的WTL测试工程的,配置。
根据你的提示,最后确实找到了些问题。但是和库目录的优先级问题倒是不大……
我的VC-LTL的安装目录为:
C:\Work\CodeSource\VC-LTL
所以呢,atlbase.h的路径应该是:
C:\Work\CodeSource\VC-LTL\\VC\14.16.27023\atlmfc\include\atlbase.h
但是实际上如果我在
#include <atlbase.h>
上右键打开atlbase.h,将会弹出错误:
C:\Work\CodeSource\c-ltl\c\4.16.27023\tlmfc\nclude\se.h 无法打开文件
这下问题有点明朗了。我做了进一步的测试,将VC-LTL目录移到根目录C,重新设置项目和ltl的路径,现在VC-LTL的目录是
C:\VC-LTL
接下来所有的一切都正常了,无论打开头文件还是编译都正常了。看起来似乎是路径长度问题?不过我看你的截图里面的路径应该比我的长才对。为了进一步检查原因,我把VC-LTL移动回原路径,再重新设置项目属性和ltl路径。右键打开atlbase.h,错误依旧。然后我添加
#include <afx.h>
,现在代码为:
`#include
右键打开afx.h,神奇般地打开了。这个时候是否是可以判断是路径长度有关?错!接下来更诡异的现象出现了,我再加了一个include
然后……两行afx.h都没法右键打开了……
至此我已经有点抓狂了,删掉一行afx.h,依然无法右键打开。然后我关闭项目,再打开,删除afx的include,然后再添加,右键打开成功。接下来我右键打开atlbase.h,一如既往地不成功,然后我再右键打开afx.h,出现了!!薛定谔的afx.h出现了,它居然再也打不开了……
上面的测试用不同的步骤重复了多遍,总之只要出现过一次无法打开头文件的情况,半秒钟之前还能打开的afx.h马上便再也无法用任何方法打开了。反正它对我的人生观世界观价值观产生了极大的冲击……至此我已经无法也没能力判断到底是windows系统问题了还是vs出问题了还是ltl出问题了又或是我穿越到了一个物理特性完全不同的平行空间……按说ltl出问题的概率比较小,不过同样路径很长的wtl文件
C:\Users\gbgba\Documents\Visual Studio 2017\commonlib\WTL10\Include\atlapp.h
始终正常打开。(和wtl版本无关,wtl9也是一样的情况)
好了,问题就是这样了,我先去想念一下静静,或许静静能告诉我问题出在哪……
附我的环境: windows 10 家庭版 1806 visaul studio 2017 15.9.11
我建议还是加QQ群吧……如果今天你不加,那么我需要半个月后才能再处理这个问题。
先关掉吧,我调高了msbuild日志等级也没有加载失败的错误日志。基本上没办法确定到底是哪儿影响的。我后来修改了一下文件发现应该是由于未知原因
<Import Project="$(VC_LTL_Root)\Config\config.props" Condition="Exists('$(VC_LTL_Root)\Config\config.props')"/>
(确定过,VC_LTL_Root变量无误,相关文件也是存在的)
这一行不生效,执行到了下一行
<!--兼容模式,尝试加载老版本--> <Import Project="$(VC_LTL_Root)\ltlvcrt.props" Condition="(!Exists('$(VC_LTL_Root)\Config\config.props')) And (Exists('$(VC_LTL_Root)\ltlvcrt.props'))"/>
然后又由于未知原因,导致了循环加载。(我没有仔细了解过属性表的工作原理,所以可能理解有误)
最后,前天晚上我实在受不了了,终于用格式化重装解决了这个问题。然后昨晚把常用软件也逐渐装回去,问题也没有再发生。之前那个系统用了两年,各种补丁升级,不同版本的vs编译器安装删除(从08到19都反复安装卸载过),大概是在这过程中影响到了什么?
这件事也确定了,win10自带的重置功能并不能做到让系统完全重置,应该还是会把某些问题设置保存下来。
其实应该让我远程看看😰
又有段时间没写c++了,这次回来发现VC-LTL升级到了4.0,同时我自己装的vs2017也升了一堆版本。然后发现自己以前的项目编译不过了。吭哧吭哧把所有用到的三方库全部重新编译了一遍,最后还是编译不过。这项目是我自己写的一个半成品音乐播放器,使用directaudio,然后链接了一堆解码库,这些都不是重点。 然后我慢慢精简代码,精简到最后只有个wtl界面依然通不过。接下来的测试就略过,反正最后就剩下来下面这几行代码。如果去掉atomic的注释,则无法通过编译。