昨天突然发生了一件非常恐怖的事——我的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. MySQL中binlog参数:binlog_rows_query_log_events

    在使用RBR也就是行格式的时候,去解析binlog,需要逆向才能分析出对应的原始SQL是什么,而且,里面对应的是每一条具体行变更的内容.当然,你可以开启general log,但如果我们需要的只是记录 ...

  2. Postmark介绍

    一. 引言 Postmark是由著名的NAS提供商NetApp开发,用来测试其产品的后端存储性能. Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁.大量 ...

  3. JQuery简单动画效果的发生顺序和animate方法

    (1)在同一组元素上的效果 当在一个.animate()方法中以多个属性的方式应用时,是同时发生的. 当以方法连缀的形式应用时,是按顺序发生的(排队效果)---除非queue选项值为false. (2 ...

  4. vue.js2.0 自定义组件初体验

    理解 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.在有些情况 ...

  5. jquery实现网页倒计时

    在毕设作品考试模块要做个倒计时,当时间到时自动结束答题.于是在jQuery插件社区找到一个简洁明了的倒计时.先上效果图. 感谢作者hacker(这是黑客的意思么),贴上地址:http://www.jq ...

  6. stl string常用函数

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

  7. git pull冲突:commit your changes or stash them before you can merge.

    今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...

  8. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  9. XML编辑工具

    [标题]XML编辑工具 [开发环境]Qt 5.2.0 [概要设计]使用QT的视图/模型结构.treeview控件以树形结构显示所要操作的XML文件,并实现xml的相关操作 [详细设计] 主要包含 no ...

  10. 学习笔记TF009:对数几率回归

    logistic函数,也称sigmoid函数,概率分布函数.给定特定输入,计算输出"success"的概率,对回题回答"Yes"的概率.接受单个输入.多维数据或 ...