【问题标题】:How do I set up a basic C++/C compile, and then link script for emscripten builds如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本
【发布时间】:2018-11-03 16:16:45
【问题描述】:

这个测试是为了准备编写一个更成熟的构建模块。但我需要先了解基础知识。渴望: - 将所有“目标文件”输出构建到输出文件夹 - 将它们链接到可分发的“wasm”二进制文件并格式化 html 页面 并将它们输出到“dist”文件夹。

我查看了以下手册:

https://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html

它不像人们想要的那样直观或明确说明。 下面是我当前的简单测试版本。

#!/bin/bash

# set emscripten toolchain paths in this shell
source "${HOME}/emsdk/emsdk_env.sh" --build=Release   

BuildDir="./build"          # root of output dir for built files
SrcDir="./src"              # a source code directory
ObjDir="${BuildDir}/obj"    # where intermediate "object" files are output to.
IncludeDir="./include"      # an include directory

# start clean for this test
rm -fr "${BuildDir}"
mkdir -p "${ObjDir}"  # also re-creates BuildDir


# compile source code out to ObjDir

emcc --default-obj-ext .bc -o "${ObjDir}/" -I "${IncludeDir}" \
    "${SrcDir}/hello.cpp" "${SrcDir}/TestClass.cpp"`

运行上面的代码会出错,但如果只有一个源文件,则可以工作。

Is a directory
Traceback (most recent call last):
      File "/home/peterk/emsdk/emscripten/incoming/emcc.py", line 3107, in <module>
...
status 1
    peterk@5a4a702ca3b5:~/didi-wasmtest/test$

以下工作,但将所有输出文件放在 src/ 文件夹中,并为它们分配 .o 后缀而不是 .bc 后缀:它还在目录中输出 .out.js 和 .out.wasm 文件脚本从运行。我想抑制这种情况,直到最终的“链接”阶段,几个编译的结果将在一个单独的步骤中链接在一起。

emcc --default-obj-ext .bc -I "${IncludeDir}" \
    "${SrcDir}/hello.cpp" "${SrcDir}/TestClass.cpp"`

【问题讨论】:

    标签: emscripten webassembly


    【解决方案1】:

    好的 - 这很好,因为 makefile 无论如何都会一次编译一个。

    #!/bin/bash
    
    source "${HOME}/emsdk/emsdk_env.sh" --build=Release   # set emscripten toolchain paths in this shell
    
    BuildDir="./build"          # root of output dir for built files
    SrcDir="./src"              # a source code directory
    ObjDir="${BuildDir}/obj"    # where intermediate "object" files are output to.
    IncludeDir="./include"      # an include directory
    DistDir="./build/dist"      # distribution "binary" output dir
    
    # start clean for this test
    rm -fr "${BuildDir}"
    
    # compile source code out to ObjDir
    mkdir -p "${ObjDir}"
    
    objFiles=""
    
    for srcFile in "${SrcDir}"/*.cpp; do
        objFile="${ObjDir}/$(basename "$srcFile").bc"
        emcc -o "${objFile}" -I "${IncludeDir}" "${srcFile}"
        objFiles+="${objFile} " # save list of objFiles for link.
    done
    
    # link object files into binary runtime in DistDir
    mkdir -p "${DistDir}"
    
    emcc -s WASM=1 ${objFiles} -o "${DistDir}/hello.html"
    
    # expose to browser to test
    cd "${DistDir}"
    python -c 'import SimpleHTTPServer; SimpleHTTPServer.test()'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2023-04-01
    相关资源
    最近更新 更多