UE4学习笔记(1):UE源码编译+安卓打包
注:该笔记以UE4..2在windows平台为例,vs版本为
1.关联github和Epic账户
要在github上获取UE4源码需要先关联账户,编译否则找不到源码,源码网页
按照官网提供流程即可完成 GitHub上的编译虚幻引擎 - Unreal Engine
记得确认邮件,否则还是源码(当初就是忘记了,卡了好一会儿)
2.下载UE4源码
在 Releases · EpicGames/UnrealEngine (github.com)中选择自己需要的编译arpspoofing源码版本(我使用的是4..2),这步很简单,源码但需要注意的编译是还需要将Commit.gitdeps.xml文件也一并下载,用于替换同名文件(有些版本则没有这样的源码文件),不替换的编译话后续会报错(之后步骤中会提到)
解压后目录如下:
3.执行bat文件
(1)点击运行setup.bat,没有替换Commit.gitdeps.xml文件可能会出现如下问题:
(2)点击运行GenerateProjectFiles.bat,源码此过程可能会出现如下问题:
未找到框架 .NETFramework Version=v4.6.2
只需要在VS Installer中选中安装就行:
完成后会生成UE4.sln文件
4.生成
VS打开UE4.sln,编译开始生成:
但是源码生成过程中我出现了这样的问题:
UE4 fatal error C: 编译器限制: 达到内部堆限制
error C: 超过了 PCH 的虚拟内存范围问题解决
我出现这样问题的原因是我的C盘空间不够大(分区的时候给的比较少),托管系统设置在C盘,编译全民无双源码下载导致无法分配足够的源码虚拟内存,设置为空间足够的盘即可。
步骤:电脑->属性->高级系统设置->高级->性能设置->高级->更改
OK,成功编译完成
5.安卓打包
该过程有官方文档,并且比较繁琐,直接给出链接:
设置虚幻的Android SDK和NDK | 虚幻引擎文档 (unrealengine.com)
UE部署到Android以及杂症的解决 - 知乎 (zhihu.com)
我就提一下自己遇到的问题,在UE4中进行安卓打包的时候遇到了这样的问题:
原因在于SetupAndroid.bat中,SDK Platform的版本选择是,而在UE项目设置->平台 - Android SDK中的SDK API Levle默认选择latest。但是我安装AS的时候默认给我安装了最新的Android API (此时latest指向的是版本),导致冲突。解决方法是UE项目设置中手动设置指定版本,或者在AS中卸载高于版本的随机抖音源码Android API。
OK,打包成功!!!
6.打开游戏
但是,是的,还有但是(都最后一步了,还有问题OVO!!!),在手机上下载安装,打开后是通信达建仓源码这样的:
原来是因为打包除了生成apk文件还生成了obb,至于Google Play Store Key应该就是一个密钥了。
解决方法是在UE项目设置->Android中勾选“将游戏数据打包至.apk中”,我们可以看到对这个勾选项的解释:
行,勾选后重新打包,成功运行:
å大ç¨åºç¼è¯å¨ï¼
C++çç¼è¯å¨é½æåªäº?
kDevelopãAnjutaãCodeBlocksãVisualMingwãIdeoneãEclipseCDTãCompilrãCodeLiteãNetbeansC++ãDev?C++ã
Kdevelopæ¯ä¸ä¸ªä¸ä¸ºC/C++åå ¶ä»è¯è¨çå¼æºæ©å±æ件IDEï¼å®åºäºKDevPlatformå¹³å°ï¼è¿æ¯ä¸æ¬¾å¯ç¨äºIDEåºç¡å¼æºåºã
AnjutaDevstudioæ¯å¦å¤ä¸æ¬¾å¼ºå¤§çå¼åå·¥å ·ï¼æ¥æå è¿çç¼ç¨ç¹æ§å æ¬é¡¹ç®ç®¡çãåºç¨ç¨åºå导ã交äºå¼è°è¯å¨ãæºç ç¼è¾å¨ãçæ¬æ§å¶ï¼GUI设计ãåæå¨ççï¼è¿æ¬¾å·¥å ·ä¸ºC/C++å¼åè æä¾å¼ºå¤§çç¨æ·çé¢æ¥å£ã
CodeBlocksæ¯ä¸æ¬¾æ¯è¾æµè¡çå è´¹ä¸å¼æºçéæå¼åç¯å¢ï¼è¯¥å·¥å ·æ¥æææåè½ï¼è½å¤æ»¡è¶³å¼åè æéï¼æ¯å¦é«æçç¨æ·çé¢ãç¼è¯åè°è¯åè½çã
Visual-MigGWæ¯ä¸æ¬¾æ为ç®åçå¼æºIDEï¼å®ææçWindowsAPIé½å¯æ¥è¿è¡ç®åå¿«éçå¼åï¼å®è¿æ¯æä¸ä¸ªéæ¶å¯ç¨çåºç¨æ¡æ¶ï¼é¡¹ç®æ管å¨SourceForge.netã
Ideoneæ¯ä¸æ¬¾å¨çº¿ç¼è¾å¨åè°è¯å·¥å ·ï¼è¿æ¬¾å·¥å ·æä¾äºå¼ºå¤§çåè½ï¼å¸®å©ç¨åºå以æ´å å¿«éææçæ¹å¼ç¼è¯æºä»£ç ã
EclipseCDTæä¾æ´å é«æçåè½ï¼å¦ï¼æ¯æ为åç§å·¥å ·é¾æä¾é¡¹ç®å建å管çãæ åæ建ãæºç 导èªãåç§ç¥è¯å·¥å ·æºï¼ä»£ç ç¼è¾å¨åè½å¦é«äº®æ¾ç¤ºãæå ãè¶ é¾æ¥å¯¼èªãæºä»£ç éæ以å代ç çæï¼å¯è§åè°è¯å·¥å ·ï¼å æ¬å åãå¯åå¨ååæ±ç¼è§å¾ã
Compileræ¯ä¸æ¬¾å¨çº¿éæå¼åå·¥å ·ï¼å è®¸ä½ ç¼å令人å°è±¡æ·±å»ç代ç åè½åç®åçç¨æ·çé¢ï¼è¯¥å·¥å ·æ¯æçè¯è¨å¦CãC++ãJavaãHTMLã
Codeliteæ¯ä¸æ¬¾æ好çå è´¹å¼æºçIDEï¼å ä¹å¯è¿è¡äºææå¹³å°ã
Netbeanså·¥å ·å å«å¤ç§ç±»å模æ¿ï¼å®æ¥æ迷人çåè½ï¼ä½¿å ¶å¨Webå¼åè æ´å æµè¡ï¼æ¯å¦ï¼ä»£ç åå©ãç¼è¯é ç½®ãåå æµè¯ãæºç æ£æµãè¿ç¨å¼ååæ件导èªçåè½ã
DevC++çåè½å æ¬ï¼ç±»æµè§å¨ãéæè°è¯ãæ¯æGCCã项ç®ç®¡çã代ç ç¼è¯ãç¼è¾ä¸ç¼è¯èµæºæ件ãå·¥å ·ç®¡çãåè½æ¸ åã
windowsçpc端ç¼è¯å¨æåªäºWindowsçpc端ç¼è¯å¨æï¼
1)VisualStudio
Windowsä¸é¦å æ¨è大家使ç¨å¾®è½¯å¼åçVisualStudioï¼ç®ç§°VSï¼ï¼å®æ¯Windowsä¸çæ åIDEï¼å®é å¼åä¸å¤§å®¶ä¹é½å¨ä½¿ç¨ã为äºéåºææ°çWindowsæä½ç³»ç»ï¼å¾®è½¯æ¯éä¸æ®µæ¶é´ï¼ä¸è¬æ¯ä¸ä¸¤å¹´ï¼å°±ä¼å¯¹VSè¿è¡å级ãVSçä¸åçæ¬ä»¥åå¸å¹´ä»½å½åï¼ä¾å¦VSæ¯å¾®è½¯äºå¹´åå¸çï¼VSæ¯å¾®è½¯äºå¹´åå¸çã
ä¸è¿VSæç¹åºå¤§ï¼å®è£ å æ2~3Gï¼ä¸è½½ä¸æ¹ä¾¿ï¼èä¸ä¼å®è£ å¾å¤ææ¶ç¨ä¸å°çå·¥å ·ï¼å®è£ æ¶é´å¨å个å°æ¶å·¦å³ã
对äºåå¦è ï¼ææ¨è使ç¨VSãæ好ä¸ç¨ä½¿ç¨VSï¼æç¹ååå¦è ã
2)Dev?C++
å¦æä½ è®¨åVSçå¤ææ§ï¼é£ä¹å¯ä»¥ä½¿ç¨DevC++ãDevC++æ¯ä¸æ¬¾å è´¹å¼æºçC/C++IDEï¼å åµ?GCC?ç¼è¯å¨ï¼LinuxGCCç¼è¯å¨çWindows移æ¤çï¼ï¼æ¯NOIãNOIP?çæ¯èµçæå®å·¥å ·ãDevC++çä¼ç¹æ¯ä½ç§¯å°ï¼åªæå åå ï¼ãå®è£ å¸è½½æ¹ä¾¿ãå¦ä¹ ææ¬ä½ï¼ç¼ºç¹æ¯è°è¯åè½å¼±ã
NOIæ¯NationalOlympiadinInformaticsç缩åï¼è¯ä¸ºâå ¨å½éå°å¹´ä¿¡æ¯å¦å¥¥æå¹å ç«èµâï¼NOIPæ¯NationalOlympiadininformaticsinProvincesç缩åï¼è¯ä¸ºâå ¨å½éå°å¹´ä¿¡æ¯å¦å¥¥æå¹å èèµâãNOIãNOIPé½æ¯å¥¥æå¹å ç«èµçä¸ç§ï¼åå è å¤ä¸ºé«ä¸çï¼è·å¥è å°è¢«ä¿éå°åç大å¦æè å¾å°é«èå åèµæ ¼ã
3)VisualC++6.0
VisualC++6.0ï¼ç®ç§°VC6.0ï¼æ¯å¾®è½¯å¼åçä¸æ¬¾ç»å ¸çIDEï¼å¾å¤é«æ ¡é½ä»¥VC6.0为æå¦å·¥å ·æ¥è®²è§£CåC++ãä½VC6.0æ¯å¹´ç产åï¼å¾å¤èäºï¼å¨Win7ãWin8ãWinä¸ä¼æåç§åæ ·çå ¼å®¹æ§é®é¢ï¼çè³æ ¹æ¬ä¸è½è¿è¡ï¼æ以ä¸æ¨è使ç¨ã
VC6.0æ©å°±è¯¥æè¿åå¾æ¡¶äºï¼å¯æ¯ä¾ç¶æå¾å¤å¤§å¦æå®ä½ä¸ºæå¦å·¥å ·ï¼å¹¶ä¸éç¨çææä¹ä»¥VC6.0为åºç¡æ¥è®²è§£Cè¯è¨åC++ï¼å¯è§æå¦ä½å¶çæ端è½åï¼è¯¾ç¨ä½ç³»çæ´æ°è¿è¿è·ä¸ä¸ææ¯çè¿æ¥ã
4)å ¶å®IDE
é¤äºä¸é¢æå°çä¸æ¬¾IDEï¼Windowså¹³å°ä¸è¿æå¾å¤å ¶ä»çIDEï¼å®ä»¬åæç¹ç¹ï¼ä¾å¦ï¼
Code::Blocksæ¯ä¸æ¬¾å¼æºã跨平å°ãå è´¹çC/C++IDEï¼å®åDevC++é常类似ï¼å°å·§çµæ´»ï¼æäºå®è£ åå¸è½½ï¼ä¸è¿å®ççé¢è¦æ¯DevC++å¤æä¸äºï¼ä¸å¦DevC++æ¥å¾æ¸ ç½ã
TurboCæ¯ä¸æ¬¾å¤èçãDOS年代çCè¯è¨å¼åå·¥å ·ï¼ç¨åºååªè½ä½¿ç¨é®çæ¥æä½TurboCï¼ä¸è½ä½¿ç¨é¼ æ ï¼æ以é常ä¸æ¹ä¾¿ãä½æ¯TurboCéæäºä¸å¥å¾å½¢åºï¼å¯ä»¥å¨æ§å¶å°ç¨åºä¸ç»å¾ï¼çèµ·æ¥é常ç«é ·ï¼æ以è³ä»ä»ç¶æ人å¨ä½¿ç¨ã
C-Freeæ¯ä¸æ¬¾å½äº§çWindowsä¸çC/C++IDEï¼ææ°çæ¬æ¯5.0ï¼æ´ä¸ªè½¯ä»¶æMï¼é常轻巧ï¼å®è£ ä¹ç®åï¼çé¢ä¹æ¯DevC++æ¼äº®ãC-Freeç缺ç¹ä¹æ¯è°è¯åè½å¼±ãå¯æçæ¯ï¼C-Freeå·²ç»å¤å¹´ä¸æ´æ°äºï¼ç»ä»¶é½èäºï¼åªè½å¨XPãWin7ä¸è¿è¡ï¼å¨Win8ãWinä¸å¯è½ä¼åå¨å ¼å®¹æ§é®é¢ã
常è§çCè¯è¨ç¼è¯å¨æ¯ä»ä¹ï¼ç®åææµè¡çCè¯è¨ç¼è¯å¨æ以ä¸å ç§ï¼
1ãGNUCompilerCollectionæ称?GCC
GCCï¼GNUCompilerCollectionï¼GNUç¼è¯å¨å¥ä»¶ï¼ï¼æ¯ç±GNUå¼åçç¼ç¨è¯è¨ç¼è¯å¨ãå®æ¯ä»¥GPL许å¯è¯æåè¡çèªç±è½¯ä»¶ï¼ä¹æ¯GNU计åçå ³é®é¨åã
GCCåæ¬ä½ä¸ºGNUæä½ç³»ç»çå®æ¹ç¼è¯å¨ï¼ç°å·²è¢«å¤§å¤æ°ç±»Unixæä½ç³»ç»ï¼å¦LinuxãBSDãMacOSXçï¼é纳为æ åçç¼è¯å¨ï¼GCCåæ ·éç¨äºå¾®è½¯çWindowsãGCCæ¯èªç±è½¯ä»¶è¿ç¨åå±ä¸çèåä¾åï¼ç±èªç±è½¯ä»¶åºéä¼ä»¥GPLåè®®åå¸ã
2ãMicrosoftCæ称MSC
MicrosoftCæ¯cè¯è¨çä¸ç§IDEï¼éæå¼åç¯å¢ï¼ï¼å¸¸è§çè¿æMicrosoftVisualC++ï¼BorlandC++ï¼WatcomC++,BorlandC++ï¼BorlandC++Builder,BorlandC++3.1forDOS,WatcomC++.0forDOS,GNUDJGPPC++ï¼LccwinCCompiler3.1,HighC,TurboCçç......
3ãBorlandTurboCæ称TurboC
TurboCæ¯ç¾å½Borlandå ¬å¸ç产åï¼Borlandå ¬å¸æ¯ä¸å®¶ä¸é¨ä»äºè½¯ä»¶å¼åãç å¶çå¤§å ¬å¸ãè¯¥å ¬å¸ç¸ç»§æ¨åºäºä¸å¥Turboç³»å软件,å¦TurboBASIC,TurboPascal,TurboProlog,è¿äºè½¯ä»¶å¾åç¨æ·æ¬¢è¿ã
æ©å±èµæï¼
Cç¼è¯çæ´ä¸ªè¿ç¨å¾å¤æï¼å¤§è´å¯ä»¥å为以ä¸å个é¶æ®µï¼
1ãé¢å¤çé¶æ®µå¨è¯¥é¶æ®µä¸»è¦å®æ对æºä»£ç çé¢å¤çå·¥ä½ï¼ä¸»è¦å æ¬å¯¹å®å®ä¹æ令ï¼å¤´æ件å å«æ令ï¼é¢å®ä¹æ令åç¹æ®å符çå¤çï¼å¦å¯¹å®å®ä¹çæ¿æ¢ä»¥åæ件头ä¸æå å«çæ件ä¸é¢å®ä¹ä»£ç çæ¿æ¢çï¼æ»ä¹è¿æ¥ä¸»è¦å®æä¸äºæ¿æ¢å·¥ä½ï¼è¾åºæ¯åæºæ件å«ä¹ç¸åä½å 容ä¸åçæ件ã
2ãç¼è¯ãä¼åé¶æ®µç¼è¯å°±æ¯å°ç¬¬ä¸é¶æ®µå¤çå¾å°çæ件éè¿è¯æ³è¯æ³åæç转æ¢ä¸ºæ±ç¼è¯è¨ãä¼åå æ¬å¯¹ä¸é´ä»£ç çä¼åï¼å¦å é¤å ¬å ±è¡¨è¾¾å¼ï¼å¾ªç¯ä¼åçï¼å对ç®æ 代ç ççæè¿è¡çä¼åï¼å¦å¦ä½å åå©ç¨æºå¨çå¯åå¨åæ¾æå ³åéçå¼ï¼ä»¥åå°å å访é®æ¬¡æ°ã
3ãæ±ç¼é¶æ®µå°æ±ç¼è¯è¨ç¿»è¯ææºå¨æ令ã
4ãé¾æ¥é¶æ®µé¾æ¥é¶æ®µç主è¦å·¥ä½æ¯å°æå ³çç®æ æ件è¿æ¥èµ·æ¥ï¼å³å°å¨ä¸ä¸ªæ件ä¸å¼ç¨ç符å·å该符å·å¨å¦å¤ä¸ä¸ªæ件ä¸çå®ä¹è¿æ¥èµ·æ¥ï¼ä½¿å¾ææçç®æ æ件æ为ä¸ä¸ªè½å¤è¢«æä½ç³»ç»è£ å ¥æ§è¡çç»ä¸æ´ä½ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-gccï¼GNUç¼è¯å¨å¥ä»¶ï¼
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-MicrosoftC
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-TurboC
cmake ..是什么意思
CMake(Cross-Platform Make)是一个跨平台的编译工具,它可以用简单的语句来描述所有平台可供使用的安装、编译、连接和打包过程。CMake不依赖于特定的编译器,生成的是可移植的Makefile,可以在不同平台上编译源代码。 CMake中的..代表什么? 在CMake中,..表示上一级目录,mes系统源码排行可以在项目目录中使用,可以用来指定项目的搜索路径。使用cmake ..命令时,CMake会寻找与当前目录同级的CMakeLists.txt文件,然后读取并处理这个文件。 CMake ..的作用是什么? 使用cmake ..命令,可以让CMake从项目目录的上一级目录中读取CMakeLists.txt文件,对项目进行配置和生成Makefile。这样的操作可以将编译所生成的文件和源代码分开,方便进行单独的构建和管理。在实际使用中,..命令通常和其他命令一起使用,常用的命令包括cd、mkdir 和 ls等。简述android源代码的编译过程
编译Android源代码是一个相对复杂的过程,涉及多个步骤和工具。下面我将首先简要概括编译过程,然后详细解释每个步骤。
简要
Android源代码的编译过程主要包括获取源代码、设置编译环境、选择编译目标、开始编译以及处理编译结果等步骤。
1. 获取源代码:编译Android源代码的第一步是从官方渠道获取源代码。通常,这可以通过使用Git工具从Android Open Source Project(AOSP)的官方仓库克隆代码来完成。命令示例:`git clone /platform/manifest`。
2. 设置编译环境:在编译之前,需要配置合适的编译环境。这通常涉及安装特定的操作系统(如Ubuntu的某些版本),安装必要的依赖项(如Java开发工具包和Android Debug Bridge),以及配置特定的环境变量等。
3. 选择编译目标:Android支持多种设备和配置,因此编译时需要指定目标。这可以通过选择特定的设备配置文件(如针对Pixel手机的`aosp_arm-eng`)或使用通用配置来完成。选择目标后,编译系统将知道需要构建哪些组件和变种。
4. 开始编译:设置好环境并选择了编译目标后,就可以开始编译过程了。在源代码的根目录下,可以使用命令`make -jN`来启动编译,其中`N`通常设置为系统核心数的1~2倍,以并行处理编译任务,加快编译速度。编译过程中,系统将根据Makefile文件和其他构建脚本,自动下载所需的预构建二进制文件,并编译源代码。
5. 处理编译结果:编译完成后,将在输出目录(通常是`out/`目录)中生成编译结果。这包括可用于模拟器的系统镜像、可用于实际设备的OTA包或完整的系统镜像等。根据需要,可以进一步处理这些输出文件,如打包、签名等。
在整个编译过程中,还可能遇到各种依赖问题和编译错误,需要根据错误信息进行调试和解决。由于Android源代码庞大且复杂,完整的编译可能需要数小时甚至更长时间,因此耐心和合适的硬件配置也是成功编译的重要因素。
Facebook Open Platform编译FAQ
1:下载源码:/fbopen/
2:根据readme的说明,把fbml所需的软件下载到dependencies目录下
3:fbml的php扩展的编译,本身有个脚本,不过一般情况下都不能顺利通过那脚本编译成功
错误提示1:
gconvert.c::2: error: #error GNU libiconv not in use but included iconv.h is from libiconv
解决办法:
修改build-all.py
'glib-2..6.tar.gz': ("./configure", "make", "sudo make install"),
改成
'glib-2..6.tar.gz': ("./configure --with-libiconv=gnu", "make", "sudo make install"),
错误提示2:
nspr4 -lpthread -ldl -L../../dist/bin -lmozjs -L/usr/local/lib -lgtk-x-2.0 -lgdk-x-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -L/usr/local/lib -lcairo -Wl,--version-script -Wl,../../build/unix/gnu-ld-scripts/components-version-script -Wl,-Bsymbolic -ldl -lm
../../dist/lib/libgkconcvs_s.a(nsCanvasRenderingContext2D.o)(.text+0xa): In function `nsCanvasRenderingContext2D::Destroy()':
: undefined reference to `XFreePixmap'
../../dist/lib/libgkconcvs_s.a(nsCanvasRenderingContext2D.o)(.text+0xa): In function `nsCanvasRenderingContext2D::SetDimensions(int, int)':
: undefined reference to `XRenderFindStandardFormat'
../../dist/lib/libgkconcvs_s.a(nsCanvasRenderingContext2D.o)(.text+0x): In function `nsCanvasRenderingContext2D::SetDimensions(int, int)':
: undefined reference to `XListPixmapFormats'
../../dist/lib/libgkconcvs_s.a(nsCanvasRenderingContext2D.o)(.text+0x): In function `nsCanvasRenderingContext2D::SetDimensions(int, int)':
: undefined reference to `XFree'
../../dist/lib/libgkconcvs_s.a(nsCanvasRenderingContext2D.o)(.text+0xd): In function `nsCanvasRenderingContext2D::SetDimensions(int, int)':
: undefined reference to `XCreatePixmap'
collect2: ld returned 1 exit status
gmake[3]: *** [libgklayout.so] Error 1
gmake[3]: Leaving directory `/usr/home/yunfeng/facebook/facebook/fb-open-platform/libfbml-1.2.0/dependencies/mozilla/layout/build'
gmake[2]: *** [libs] Error 2
gmake[2]: Leaving directory `/usr/home/yunfeng/facebook/facebook/fb-open-platform/libfbml-1.2.0/dependencies/mozilla/layout'
gmake[1]: *** [tier_9] Error 2
gmake[1]: Leaving directory `/usr/home/yunfeng/facebook/facebook/fb-open-platform/libfbml-1.2.0/dependencies/mozilla'
make: *** [default] Error 2
解决办法:
修改dependencies/mozilla/layout/build/Makefile.inifdef
MOZ_ENABLE_GTK2EXTRA_DSO_LDOPTS += $(MOZ_GTK2_LIBS) / $(NULL)
改成ifdef MOZ_ENABLE_GTK2EXTRA_DSO_LDOPTS += $(MOZ_GTK2_LIBS) / -L/usr/XR6/lib -lX -lXrender / $(NULL)
这个错误一般发生在firefox编译的时候,我一般都手动解压缩firefox软件,然后修改Makefile.in,然后在build-all.py中屏蔽解压缩firefox的语句就行
错误提示3:
In file included from js/jsarena.c::
js/jsbit.h:: error: size of array 'js_static_assert_line_' is negative
make[1]: *** [js/jsarena.o] Error 1
make: *** [src] Error 2
解决办法:
修改 src/js/jsbit.h 第行
S_STATIC_ASSERT(sizeof(unsigned long long) == sizeof(JSUword));
改成
S_STATIC_ASSERT(sizeof(unsigned long) == sizeof(JSUword));
这个错误发生在firefox编译成功后,进行fbml的编译时候发生的,如果你用build-all.py编译,不想进行前面的编译,可以根据脚本屏蔽前面的编译。
2024-12-28 22:42
2024-12-28 22:41
2024-12-28 22:07
2024-12-28 21:57
2024-12-28 21:50