em-dosbox
程序员文章站
2022-03-16 20:07:22
...
基本知识:
1.emscripten gcc8.2
2.参考:https://blog.csdn.net/martinking1997/article/details/82460849
3.修改过的 https://github.com/killinux/em-dosbox
########## error:
emcc 报错
version `GLIBCXX_3.4.21' not found
strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
检查C_INCLUDE_PATH and LD_LIBRARY_PATH and PATH
是因为gcc版本太低了,需要gcc8.0
############需要emscripten
https://haoningabc.iteye.com/admin/blogs/2411956
######################## 如果有ssl错误:
Error: Downloading URL 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/b024b71038d1291ed7ec23ecd553bf2c0c8d6da6/wasm-binaries.tbz2': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)>
Warning: Possibly SSL/TLS issue. Update or install Python SSL root certificates (2048-bit or greater) supplied in Python folder or https://pypi.org/project/certifi/ and try again.
Installation failed!
vim emsdk.py
加入
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
######################### 错误 expected unqualified-id
make em-dosbox的时候会报错
这个在mac下没解决。。。。。 2019年12月5日解决
大量error:
version:1:1: error: expected unqualified-id
参考
https://github.com/nmap/nmap/issues/1586
/usr/local/Cellar/emscripten/1.38.44/libexec/system/include/libcxx/cstddef
/usr/local/Cellar/emscripten/1.38.44/libexec/system/include/libcxx/type_traits
<version> to "version"
这样要改n个文件,不可取
搜索VERSION em-dosbox官方有个VERSION文件和emcc要用的<version>冲突了
把em-dosbox根目录的VERSION 删掉就好了
########### redhat8 上安装没有 libgcc的问题
export LANGUAGE="en_US.UTF-8"
export LANG=en_US:zh_CN.UTF-8
export LC_ALL=C
yum install autoconf automake cmake -y
yum install python3 -y
ln -s /usr/bin/python3 /usr/bin/python
注意需要用cmake3 卸载cmake2
########### centos 7 完整实验:
因为emcc需要的libstdc++.so 要比较高的版本,默认的4.8不行,
先装gcc8.2,
设置 LD_LIBRARY_PATH
再使用emsdk
参考:
https://blog.csdn.net/martinking1997/article/details/82460849
不用https://blog.cles.jp/item/9428
gcc 要用8
下载:http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/
需要cmake3
必要包的安装:
yum install -y epel-release yum install -y cmake3 nodejs npm java-1.8.0-openjdk java-1.8.0-openjdk-devel git ln -s /usr/bin/cmake3 /usr/local/bin/cmake yum install autoconf automake -y yum install -y gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel yum install zlib zlib-devel pcre pcre-devel -y yum install gcc-c++ glibc-headers -y yum remove gcc 这样容易看出gcc的错误
安装gcc8.2:
./configure --with-system-zlib --disable-multilib --enable-languages=c,c++,fortran --prefix=/usr/local/gcc8 make -j4 make install
检查
strings /usr/local/gcc8/lib64/libstdc++.so|grep GLIBCXX
export LD_LIBRARY_PATH=/usr/local/gcc8/lib64:$LD_LIBRARY_PATH
先删除本机的gcc方便调试
yum remove gcc
安装em-dosbox
后设置环境变量:
export GCC_HOME=/usr/local/gcc8 export PATH=$GCC_HOME/bin:$PATH export MANPATH=$GCC_HOME/share/man export CPATH=$GCC_HOME/include export C_INCLUDE_DIRS=$GCC_HOME/include export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64 export LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64
安装参考:
http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html
https://blog.csdn.net/martinking1997/article/details/82460849
这个最重要
安装emscripten:
git clone https://github.com/juj/emsdk.git cd emsdk ./emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit ./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit source ./emsdk_env.sh --build=Release
##########在安装clang的时候
The CXX compiler identification is unknown
需要在 emsdk/clang/fastcomp/src
里面加
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc") set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")
删除emsdk/clang/fastcomp 编译过的clang目录,因为cmake CACHE PATH的时候 ,里面有CMakeCache.txt错误会保留,
重新
./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit
/opt/mt/emsdk/emscripten/incoming/tools/optimizer/CMakeLists.txt
的cc也找不到
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc") set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")
删掉incoming上一层 的编译的目录
重新
/opt/mt/emsdk/binaryen/master/CMakeLists.txt
加入
set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc") set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++")
删掉master上一层 的编译的目录
重新
##############################
测试hello.c
#include <stdio.h> int main( ) { printf("Hello World!\n"); }
emcc hello.c
node a.out.js
安装em-dosbox:
git clone https://github.com/killinux/em-dosbox
cd em-dosbox ./autogen.sh emconfigure ./configure --prefix=/usr/local/em-dosbox --enable-wasm make -j4
注意一定要有 --enable-wasm
运行打包exe的时候如果出现
TypeError: Module.addRunDependency is not a function
是因为没有FORCE_FILESYSTEM=1
编译前
需要修改
vim src/makefile.am
this change is necessary for file-system access. Otherwise the games do not start. changed in "src/makefile.am" line21(new): dosbox_LDFLAGS=-s TOTAL_MEMORY=134217728 -s ALLOW_MEMORY_GROWTH=0 -s FORCE_FILESYSTEM=1 line32(new): dosbox_LDFLAGS+=-s WASM=1 -s 'BINARYEN_TRAP_MODE="clamp"' taken from: https://medium.com/@bartoszpolnik/emulating-deluxe-ski-jump-2-with-dosbox-and-wasm-88f24f5a4aaf
再make -j4
############# mac 下:
参考https://csl.name/post/em-dosbox/
直接
brew install SDL2 SDL2_image emscripten brew install binaryen
~/.emscripten
检查一下,需要类似如下:
LLVM_ROOT = "/usr/local/opt/emscripten/libexec/llvm/bin" NODE_JS = "/usr/local/bin/node" EMSCRIPTEN_ROOT = "/usr/local/Cellar/emscripten/1.38.44/libexec" BINARYEN_ROOT = "/usr/local/opt/binaryen" COMPILER_ENGINE = NODE_JS JS_ENGINES = [NODE_JS]
emcc不报错
emcc hello.c
cd em-dosbox
emconfigure ./configure --prefix=/usr/local/em-dosbox --enable-wasm
make -j4
mac 已经解决,注意VERSION问题,如果报错,就删掉em-dosbox/VERSION
这个文件和编译时,系统需要的<version>冲突了
python3 -m http.server 9999
################# 普通 dosbox 的基本使用
dosbox:
mount c ~/mydos
ctrl +f10 退出
去百度盘下载 masm工具,放到 ~/mydos下
mt下面有tools.rar
dosbox的helloworld:
https://www.cnblogs.com/flipped/p/7683656.html
hello.asm
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT BUF DB 'Hello world!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START
masm hello
生成hello.obj
link hello
生成hello.exe
########## 在em-dosbox中运行这个exe
#./packager.py gwbasic gwbasic.exe
./packager.py hello HELLO.EXE
会生成hello.html
如果遇到问题看这个https://github.com/dreamlayers/em-dosbox/issues/49
需要configure的时候--enable-wasm 和 src/Makefile.am 中 设置 -s FORCE_FILESYSTEM=1
python -m SimpleHTTPServer 8000
访问hello.html即可
https://www.helplib.com/GitHub/article_98874
###########
jsdos:
https://js-dos.com/getting-started/
https://dos.zczc.cz/games/%E8%B6%85%E6%97%B6%E7%A9%BAG%E7%82%B9/
https://github.com/killinux/emularity
原来的github上的dosbox-sync.js dosbox-sync.mem没有了,去doc.zczc.cz上找到的这俩文件
################# 使用DosBox运行dos游戏的简易方法
http://blog.lujun9972.win/blog/2017/11/01/%E4%BD%BF%E7%94%A8dosbox%E8%BF%90%E8%A1%8Cdos%E6%B8%B8%E6%88%8F%E7%9A%84%E7%AE%80%E6%98%93%E6%96%B9%E6%B3%95/index.html
cp cskgd.zip ~/mydos
unzip cskgd.zip
/Applications/dosbox.app/Contents/MacOS
./DOSBox
mount c ~/mydos
c:
cd cskgd
qr
问题:
已经有的exe 怎么用em-dosbox运行
已经解决
package.py hello HELLO.EXE
注意原版的em-dosbox需要打个补丁https://github.com/dreamlayers/em-dosbox/issues/49
################ emscripten的文件系统
https://segmentfault.com/a/1190000011228779
https://github.com/zephyrproject-rtos/zephyr/pull/348
brew install gettext qemu help2man mpfr gmp coreutils wget python3 dfu-util dtc