107 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# 问题
							 | 
						|||
| 
								 | 
							
								使用Ubantu官方安装的系统编译的v8环境放入Puerts插件后可以正常运行;使用 adamrehn/ue4-runtime:22.04-vulkan-x11镜像下载编译环境后,编译v8环境并且放入puerts插件,运行后会报错。初步认为是编译环境有问题所致。可能是因为参与编译的libatomic.so.1库是32位的。
							 | 
						|||
| 
								 | 
							
								![[Puerts启动错误.png]]
							 | 
						|||
| 
								 | 
							
								# 需求
							 | 
						|||
| 
								 | 
							
								1. 参考 adamrehn/ue4-runtime:22.04-vulkan-x11,重新构建容器
							 | 
						|||
| 
								 | 
							
								2. 安装下列环境以进行Puerts的V8环境编译
							 | 
						|||
| 
								 | 
							
								```bash
							 | 
						|||
| 
								 | 
							
								sudo apt-get install clang
							 | 
						|||
| 
								 | 
							
								sudo apt-get install libc++-dev
							 | 
						|||
| 
								 | 
							
								sudo apt-get install libc++abi-dev
							 | 
						|||
| 
								 | 
							
								sudo apt-get install make
							 | 
						|||
| 
								 | 
							
								curl -sL https://deb.nodesource.com/setup_16.x | sudo -e bash -
							 | 
						|||
| 
								 | 
							
								sudo apt-get install -y nodejs
							 | 
						|||
| 
								 | 
							
								sudo apt-get install git
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```bash
							 | 
						|||
| 
								 | 
							
								# 下载编译脚本,脚本需要手动修改一下
							 | 
						|||
| 
								 | 
							
								cd /home/user/Projects/
							 | 
						|||
| 
								 | 
							
								git clone https://github.com/puerts/backend-nodejs.git
							 | 
						|||
| 
								 | 
							
								cd /home/user/Projects/backend-nodejs/node-script
							 | 
						|||
| 
								 | 
							
								npm install -s commander
							 | 
						|||
| 
								 | 
							
								/home/user/Projects/backend-nodejs/linux.sh
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								**修改过的编译脚本**:
							 | 
						|||
| 
								 | 
							
								```sh
							 | 
						|||
| 
								 | 
							
								WORKSPACE=/home/user/Projects/backend-nodejs
							 | 
						|||
| 
								 | 
							
								HOMEPATH=~
							 | 
						|||
| 
								 | 
							
								VERSION=$1
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								cd $HOMEPATH
							 | 
						|||
| 
								 | 
							
								# git clone https://github.com/nodejs/node.git
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								cd node
							 | 
						|||
| 
								 | 
							
								# git fetch origin v$VERSION
							 | 
						|||
| 
								 | 
							
								# git checkout v$VERSION
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								echo "=====[Patching Node.js]====="
							 | 
						|||
| 
								 | 
							
								node $WORKSPACE/node-script/do-gitpatch.js -p $WORKSPACE/patchs/lib_uv_add_on_watcher_queue_updated_v16.16.0.patch
							 | 
						|||
| 
								 | 
							
								node $WORKSPACE/node-script/add_arraybuffer_new_without_stl.js deps/v8
							 | 
						|||
| 
								 | 
							
								node $WORKSPACE/node-script/make_v8_inspector_export.js
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								echo "=====[Building Node.js]====="
							 | 
						|||
| 
								 | 
							
								export CC=clang
							 | 
						|||
| 
								 | 
							
								export CXX=clang++
							 | 
						|||
| 
								 | 
							
								export CXXFLAGS="-stdlib=libc++"
							 | 
						|||
| 
								 | 
							
								export LDFLAGS="-stdlib=libc++"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								./configure --shared
							 | 
						|||
| 
								 | 
							
								make -j8
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 这后面可以的可以不要,执行需要libnode.so.93 libnode.so
							 | 
						|||
| 
								 | 
							
								mkdir -p ../puerts-node/nodejs/include
							 | 
						|||
| 
								 | 
							
								mkdir -p ../puerts-node/nodejs/deps/uv/include
							 | 
						|||
| 
								 | 
							
								mkdir -p ../puerts-node/nodejs/deps/v8/include
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								cp src/node.h ../puerts-node/nodejs/include
							 | 
						|||
| 
								 | 
							
								cp src/node_version.h ../puerts-node/nodejs/include
							 | 
						|||
| 
								 | 
							
								cp -r deps/uv/include ../puerts-node/nodejs/deps/uv
							 | 
						|||
| 
								 | 
							
								cp -r deps/v8/include ../puerts-node/nodejs/deps/v8
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								mkdir -p ../puerts-node/nodejs/lib/Linux/
							 | 
						|||
| 
								 | 
							
								cp out/Release/libnode.so.* ../puerts-node/nodejs/lib/Linux/
							 | 
						|||
| 
								 | 
							
								cd ../puerts-node/nodejs/lib/Linux/
							 | 
						|||
| 
								 | 
							
								ln -s libnode.so.93 libnode.so
							 | 
						|||
| 
								 | 
							
								cd -
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 原容器存在问题
							 | 
						|||
| 
								 | 
							
								adamrehn/ue4-runtime:22.04-vulkan-x11存在的问题:
							 | 
						|||
| 
								 | 
							
								1. 缺少相关编译环境。
							 | 
						|||
| 
								 | 
							
								2. 没有设置环境变量不知道root、ue4账号密码。
							 | 
						|||
| 
								 | 
							
								3. 参与编译的libatomic.so.1库是32位的。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								经过测试使用官方镜像安装的Ubantu可以正常进行编译(UE项目以及Puerts v8环境),并且可以正常打开项目;原容器可以编译UE项目,但因为编译的Puerts v8环境有一些问题导致无法运行Puerts。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 启动命令参考
							 | 
						|||
| 
								 | 
							
								```bash
							 | 
						|||
| 
								 | 
							
								运行UE用:
							 | 
						|||
| 
								 | 
							
								sudo docker run --gpus=all --rm -e DISPLAY -ti \
							 | 
						|||
| 
								 | 
							
								-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
							 | 
						|||
| 
								 | 
							
								-v /home/user/Linux_Unreal_Engine_5.1.1:/home/ue4/UnrealEngine \
							 | 
						|||
| 
								 | 
							
								-v /home/user/Projects/AIMotionRender:/project \
							 | 
						|||
| 
								 | 
							
								adamrehn/ue4-runtime:22.04-vulkan-x11
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								编译v8环境用:
							 | 
						|||
| 
								 | 
							
								sudo docker run -u 0 --gpus=all --rm -e DISPLAY -ti \
							 | 
						|||
| 
								 | 
							
								-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
							 | 
						|||
| 
								 | 
							
								-v /home/user/Linux_Unreal_Engine_5.1.1:/home/ue4/UnrealEngine \
							 | 
						|||
| 
								 | 
							
								-v /home/user/Projects/AIMotionRender:/project \
							 | 
						|||
| 
								 | 
							
								-v /home/user/node:/home/user/node \
							 | 
						|||
| 
								 | 
							
								-v /home/user/Projects/backend-nodejs:/home/user/Projects/backend-nodejs \
							 | 
						|||
| 
								 | 
							
								adamrehn/ue4-runtime:22.04-vulkan-x11
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# UE项目测试方法
							 | 
						|||
| 
								 | 
							
								将编译出来的libnode.so.93 libnode.so放入/home/user/Projects/AIMotionRender/Plugins/Puerts/ThirdParty/nodejs_16/lib/Linux 目录下,之后就可以启动容器
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/home/ue4/UnrealEngine/Engine/Build/BatchFiles/Linux/GenerateProjectFiles.sh /project/AIMotionRender.uproject -game -engine -rocket -progress -VSCode
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								编译命令:
							 | 
						|||
| 
								 | 
							
								/home/ue4/UnrealEngine/Engine/Build/BatchFiles/Linux/Build.sh Development Linux -Project="/project/AIMotionRender.uproject" -TargetType=Editor -Progress -NoEngineChanges -NoHotReloadFromIDE
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								启动命令:
							 | 
						|||
| 
								 | 
							
								/home/ue4/UnrealEngine/Engine/Binaries/Linux/UnrealEditor -log "/project/AIMotionRender.uproject"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								启动过程没有报错就可以了。
							 |