昨天突然发生了一件非常恐怖的事——我的ue4项目居然不能打包了!!

大概是这么一回事:

 UATHelper: 打包 (Windows (64位)): UnrealBuildTool: ERROR: Non-editor build cannot depend on non-redistributable modules
我试了一下在vs里用development而不是developmenteditor生成结果出现了这么一说:
 
于是我大概猜测到应该和非编辑器build模式(也就是打包)不能依赖于umgeditor有关的不可再发行模块。
但具体要怎么解决还是无从下手,我尝试了删掉临时文件重新generate code,rebuild项目都没卵用,根据unreal wiki上的问答把build.cs文件魔改了一通也没能成功。。
于是二分回退大法就要闪亮登场了!

众所周知,程序员除了print111111大法以外,还有一项独门秘技,叫做二分查错法。

也就是一段程序有问题但不知道问题在哪里的时候,注释掉后半段看看还有没有问题,如果不出错了说明问题在后半段反之问题在前半段,以此类推,不断缩小范围。。。直到找出有问题的行。

二分查错法的升级版是我独创的(?)二分优化法,如果游戏出现蜜汁卡顿,(前提是先确定是逻辑线程耗时过长)同样是先注释掉一大段代码,用二分法不断缩小范围,直到找到卡顿的代码行。

然而现在又有升级版了,叫做二分回退大法!可以解决一些非常严重但就是找不到原因的问题。

二分回退法和传统的二分法不同,它是时间上的二分而不是空间的。

首先我们需要有时不时提交到版本控制的好习惯,我用的是微软的vsonline team foundation service,具体怎么和ue4结合进行源码管理我以后会单独写篇文章介绍。

具体做法就是把项目回退到记忆中可以打包的版本(l表示),然后取当前版本已知不可打包版本(r表示)到当前已知可打包版本的一半(时间上的一半,(l+r)/2)再进行回退,尝试打包,如果不能打包说明导致不能打包的那次修改的范围在l~(l+r)/2,否则在(l+2)/2~r。。。

以此类推,最终我发现了changeset 375可以正常打包,而之后的376突然就打包失败了!!

真相就在眼前!!!

我点开#376,

赫然看到uproject文件多出了一行umgeditor!!!

尼玛,这不就是前面那个link出错的umgeditor什么什么lib文件嘛!!!

震惊了,原来是uproject多了这么一行导致打包需要多弄这么个模块。

于是我又回到了最新版本,把uproject文件用记事本打开,删掉了umgeditor这行,果然伴随着清脆的一声滴,打包成功了!!!

至于为什么会莫名其妙多出这一行呢,原来是我当时试图添加一个继承widgetcomponent的c++类,结果没能添加成功,我也就没当一回事,没想到埋下了如此伏笔。

所以这个故事告诉了我们至少3点:

1.如果ue4打包失败就去检查一下.uproject文件

2.使用版本控制并经常check in 的好处

3.二分回退大法的妙用

ue4打包问题的巧妙解决——二分回退大法!的更多相关文章

  1. UE4 打包详细流程

    这两天试着把之前做的一个UE4项目在安卓机上运行下,于是乎有了下面的一个打包血泪史. 首先呢,肯定是下载好了UE的源码了,我用的是4.18. 安装步骤可以先参考下官方的教程http://api.unr ...

  2. 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题

    本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...

  3. [BZOJ1271][WC2008]秦腾与教学评估(巧妙的二分)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1271 分析: 很巧妙的一道题 因为最多只有一个点是奇数,所以说明这个点前面的前缀和都是 ...

  4. Java项目打包工具安装失败解决方法

    在学习Java的时候我们打包项目但遇到例如以下情况:(提示没有找到java的执行环境! ) 网上眼下有两中的解决方式: (1)选择本地jdk环境; (2)下载Download 可是第一种选择本地老是失 ...

  5. Jenkins Maven打包出错异常的解决方法

    Jenkins是一个很好用的打包部署工具,实现一键式部署项目,在项目处于测试阶段或者对于运维人员来讲是非常方便的一个工具. 但是最近使用Jenkins部署项目时老是出错,主要是maven打包的问题,错 ...

  6. maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法

    问题: maven 打包时,有的文件打不进去target 解决: 因为maven打包默认打Java文件.在项目中的pom文件中加build标签 <build> <resources& ...

  7. vue项目打包之后页面空白解决办法

    之前项目遇到个情况,npm run build打包之后上传到服务器后,index.html打开一片空白,资源都加载了,但是就是不显示. 然后百度找了原因,修改了两处地方 一.修改 assetsPubl ...

  8. windows 环境下python 安装 pypcap 并用pyinstaller打包到exe,解决DLL 加载失败。

    安装 PYQT5 pypcap 环境: windows10_x64 python3.6.3 pycharm2017.2.4 备注: 需要安装 Visual C++ Build Tools 2015 可 ...

  9. UE4打包程序没有声音-需要安装UE4PrereqSetup_x64.exe

    一个UE4工程打包之后,放到一台新机器,最好安装一下UE4自带的Prerequisites,否则可能会出现没有声音的问题 此安装程序位于WindowsNoEditor\Engine\Extras\Re ...

随机推荐

  1. 使用Java语言开发微信公众平台(五)——获取access_token

    在前四期的文章中,我们分别学习了"环境搭建与开发接入"."文本消息的接收与响应"."被关注回复与关键词回复"."图文消息的发送与响 ...

  2. 用Entity Framework往数据库插数据时,出现异常,怎么查看异常的详细信息呢?

    做项目时,在用Entity Framework往数据库插数据时,程序报异常,但是通过报的异常死活没法查看异常的详细信息.这让人很是烦恼.本着自己动手丰衣足食的原则,通过查看资料终于找到了显示异常详细信 ...

  3. AIX误删除LV后如何进行现场保护和数据恢复工作

    在AIX环境下,若因维护误操作.存储mapping错误等,不小心将LV误删除,这种损失通常是巨大的.删除后的不当保护及恢复操作可能使数据无法恢复,也可能增加处理的时间与算法复杂度.如何有效保护现场,并 ...

  4. stl_config.h基本宏

    四.宏: (其实呢, 我们所有的宏都包含在了 "stl_config.h"头文件中.) //这些宏是怎么判断是否需要定义:是否有指定的宏,还有一些特定的编译器也可能支持. 4.1. ...

  5. jQuery选择器与CSS选择器

    1. 通过位置选择的几个操作: :first:默认情况下是相对整个页面来说的第一个,如:li:first表示整个页面的第一个li元素,而ul li:first表示整个页面的第一个li元素,并且是在ul ...

  6. mui开发app之webview是什么

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,webview被封装在html5+,plus对象中,底层由java,OC实现. 先来谈谈我对webview的理解: 使用mui开发的a ...

  7. Roguelike元素对游戏设计的影响

    Roguelike game自1980年以来,就占据着游戏市场中很大的份额,而现如今的很多游戏中,也加入了Roguelike元素来起到更好的效果.我们知道Roguelike game中有着一些看似任性 ...

  8. SOA与基于CDIF的API的联动

    几千年来,巴别塔的故事一直是人类面对的一个核心的困境.为了交流和沟通我们人类创造出语言,但沟通与交流仍然存在障碍……相同语言之间的沟通依语境的不同,尚且存在巨大的鸿沟,不同语言之间更是让人坐困愁城. ...

  9. CoreCRM 开发实录 —— 前后端分离的重构

    虽然2月初就回来了,可 CoreCRM 一直到5月才开始恢复开发,期间是各种生活中的意外和不方便. 1. 为什么要重构 首先是一件很值得高兴的事情:CoreCRM 有了第一位 contributor! ...

  10. 调用startActivityForResult后,onActivityResult为什么立刻响应

    现象      今天在编写代码的时候,涉及到两个Activity通过Intent来传值的问题.具体描述为:activity A调用startActivityForResult()函数启动Activit ...