基本知识:
1.emscripten gcc8.2
2.参考:https://blog.csdn.net/martinking1997/article/details/82460849
########## 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':
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下没解决。。。
########### 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
必要包的安装:
1 2 3 4 5 6 7 8 9 10 11 | 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:
1 2 3 | ./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
后设置环境变量:
1 2 3 4 5 6 7 8 | 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:
1 2 3 4 5 | 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
里面加
1 2 | 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也找不到
1 2 | 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
加入
1 2 | set(CMAKE_C_COMPILER "/usr/local/gcc8/bin/gcc") set(CMAKE_CXX_COMPILER "/usr/local/gcc8/bin/g++") |
删掉master上一层 的编译的目录
重新
##############################
测试hello.c
1 2 3 4 5 6 | #include <stdio.h> int main( ) { printf("Hello World! "); } |
emcc hello.c
node a.out.js
安装em-dosbox:
1 2 3 4 | cd em-dosbox ./autogen.sh emconfigure ./configure --prefix=/usr/local/em-dosbox make -j4 |
############# mac 下:
参考https://csl.name/post/em-dosbox/
直接
1 2 3 | brew install SDL2 SDL2_image emscripten brew install binaryen |
~/.emscripten
检查一下,需要类似如下:
1 2 3 4 5 6 | 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
make -j4
还是报错
原因这里找试试,
https://github.com/dreamer/dosbox-staging/issues/19
目前未解决
###########
em-dosbox:
./autogen.sh
emconfigure ./configure --prefix=/usr/local/em-dosbox
make
#######error: error: unknown type name 'ptrdiff_t'
https://github.com/joncampbell123/dosbox-x/issues/859
在autogen.sh之前
grep -nr LDFLAGS *
configure.ac里面设置
+new="-framework CoreFoundation -framework Carbon "
+export LDFLAGS="$new$LDFLAGS"
这个不好使
python -m http.server 9999
################# 普通 dosbox 的基本使用
dosbox:
mount c ~/mydos
ctrl +f10 退出
去百度盘下载 masm工具,放到 ~/mydos下
meituan下面有tools.rar
dosbox的helloworld:
https://www.cnblogs.com/flipped/p/7683656.html
hello.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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
python -m SimpleHTTPServer 8000
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运行