xmake icon indicating copy to clipboard operation
xmake copied to clipboard

obj文件损坏时,应该重新生成

Open Domain opened this issue 3 years ago • 4 comments

你在什么场景下需要该功能?

编译时遇到VS的LNK1136报错,就是obj文件损坏或无效,如果手动删除这个obj文件,则会提示LNK1104,无法打开obj文件,而并不会自动生成。好像只能删除缓存,如果是远程缓存,就更麻烦。

描述可能的解决方案

当遇到LNK1136或者LNK1104报错时,应该尝试重新生成这个obj文件。

描述你认为的候选方案

No response

其他信息

No response

Domain avatar Jul 10 '22 11:07 Domain

到了 link 阶段再去重新生成obj改动太大,不现实,暂时不会考虑。。

先得找出损坏原因,尽可能避免出现损坏。而不是直接通过 workaround 规避问题。可以先尝试复现看看,到底哪些 case 下容易出现损坏。

按理本地缓存,除非 copy 过程中中断了,其他情况损坏的几率不大。远程收发有做过一些处理,只有完整收完才会实际生效。

目前没对 obj 做完整性校验,也是为了性能考虑,毕竟每次编译对每个 obj 都去算一遍 hash 太耗时。

waruqi avatar Jul 12 '22 14:07 waruqi

原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。 另外不知道分布式编译有没有处理远程机器内存不足的问题?以前用fastbuild经常出现远程机器内存不足导致编译失败,后来改了,会重新本地编译出错的文件。

Domain avatar Jul 14 '22 02:07 Domain

原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。

删除那个我回头会改进下

另外不知道分布式编译有没有处理远程机器内存不足的问题?以前用fastbuild经常出现远程机器内存不足导致编译失败,后来改了,会重新本地编译出错的文件。

目前没判断内存啥的,后期会考虑针对内存和cpu负载 来优化调度算法,但目前不管什么原因导致的远程服务编译失败,都是会自动 fallback 到本地编译。

waruqi avatar Jul 14 '22 05:07 waruqi

原因不好找,以前普通VS工程也会出现,删除obj文件就会重新编译,用xmake现在只能删除缓存全部重新编译。fastbuild删除单个obj文件,会重新编译这个文件,xmake现在是提示找不到obj文件。

这个问题 我 dev 修了

waruqi avatar Jul 15 '22 04:07 waruqi