emscripten 在 ubuntu 上的安装和配置相对比较顺利,但在Windows上遇到不少坑
步骤:
这个repo只是包含了sdk的安装程序,然后靠emsdk命令来安装真正的emscrtipen sdk和相关依赖
在Windows上会下载 Java, Node, Python 和 fastcomp; fastcomp 就是 emscripten 的 sdk
下载的目录是 ./zips, 如果下载较慢,可以直接拷贝下载地址到迅雷,然后拷贝到 zips下,注意一定要拷贝,不能剪切,因为 该命令 会删除掉下载的文件,另外,新版的 下载脚本 会忽略 zips 中已有的文件,会覆盖下载,这时需要修改 emsdk.py, 具体修改如下 git diff 的结果
@@ -1258,7 +1258,7 @@ def download_and_unzip(zipfile, dest_dir, download_even_if_exists=False, filenam
# target directory, since it may be a new version of a tool that gets
# installed to the same place (that is, a different download name
# indicates different contents).
- download_even_if_exists = True
+ # download_even_if_exists = True // liyh download by xunlei
received_download_target = download_file(url, zips_subdir, download_even_if_exists, filename_prefix)
if not received_download_target:
@@ -1722,8 +1722,8 @@ class Tool(object):
# if we are downloading a zip, we will unpack and delete it after immediately anyhow,
# so there is no need to look for an existing one (which may have been left behind
# due to an error in the past)
- if url.endswith(ARCHIVE_SUFFIXES):
- download_even_if_exists = True
+ #if url.endswith(ARCHIVE_SUFFIXES): # liyh download by xunlei
+ # download_even_if_exists = True
filename_prefix = getattr(self, 'zipfile_prefix', '')
success = download_and_unzip(url, self.installation_path(), download_even_if_exists=download_even_if_exists, filename_prefix=filename_prefix)
else:
建议不要每次执行这个脚本,而是将环境变量直接配置到Windows系统中,原因是这个脚本会冲掉vs的环境变量,即:如果先进入了 vs 的 Developer Command Prompt 然后执行它,会导致vs的环境变量被干掉, 如果不想设置到系统中,就需要先执行emsdk_env.bat 然后再执行 vs的 Developer Command Prompt 的bat(“C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat”)
即 在 原来CMake . 的命令前加上了 emconfigrure, 按文档说明,emconfigrure主要是修改了 cc compile 等CMake变量
如果要使用 Windows 里的 nmake,就需要执行 emconfigure cmake . -G “NMake Makefiles” 告诉 cmake 生成 nmake 脚本
如果CMakeLists.txt 中没有用到 target_link_libraries 命令,会已有一个错误提示
shared:ERROR: no input files
note that input files without a known suffix are ignored, make sure your input files end with one of: ('.c', '.C', '.i', '.cpp', '.cxx', '.cc', '.c++', '.CPP', '.CXX', '.CC', '.C++', '.ii', '.m', '.mi', '.mm', '.mii', '/dev/null', '.bc', '.o', '.obj', '.lo', '.dylib', '.so', '.a', '.ll', '.h', '.hxx', '.hpp', '.hh', '.H', '.HXX', '.HPP', '.HH')
可以忽略,不影响最后的编译,如果要屏蔽他,可以随便加入一个库如: target_link_libraries(app pthread)
另外:尝试了在Windows上使用 WSL (Windows Subsystem Linux)来进行emscripten 的环境配置,但是没有成功,卡在了./emsdk install latest,这一步会下载依赖的安装程序,安装程序会做调用tar来解包,解包过程中 出现了 tar: Cannot create symlink to Operation not permitted 的错误,初步怀疑是文件系统(exFAT)的原因,没有深究了