欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

相关标签: gcc emscripten