如何在 Emscripten 中设置 gcc 标志

Posted

技术标签:

【中文标题】如何在 Emscripten 中设置 gcc 标志【英文标题】:How to set gcc flags in Emscripten 【发布时间】:2016-05-24 19:28:48 【问题描述】:

我使用以下命令编译:

gcc -Wall -march=native -O3 -ffast-math -I/usr/local/include -I/usr/local/include -o waon main.o notes.o midi.o analyse.o fft.o hc.o snd.o -L/usr/local/lib -L/usr/local/lib -lfftw3 -L/usr/local/lib -lsndfile -lm

我现在想用 Emscripten 编译。如何将上面的gcc 命令转换成emcc 命令?

【问题讨论】:

【参考方案1】:

您在问题中描述的命令是链接而不是编译。但是一般来说,您应该能够将gcc 替换为emcc,它会做正确的事情。在这种情况下,您不仅需要替换此链接命令,还需要替换用于将源代码编译为 .o 文件的命令。

去掉-march 选项可能是个好主意。

看起来您的项目正在使用 libsndfile 和 FFTW。您可能需要使用 emscripten 自己编译这些库。他们都使用自动工具,所以如果你运气好的话,你可以通过在运行配置脚本时添加以下参数来使用 emscripten 编译它们:

./configure --prefix=$HOME/emscripten-libs CC=emcc
make && make install

然后,当您链接您的程序时,您可以指定-L$HOME/emscripten-libs/lib 而不是-L/usr/local/lib

【讨论】:

【参考方案2】:

对您计算机上的 emsdk 下载和设置进行研究。

Download emsdk instruction

下一个兴趣链接是:

emcc or em++ instruction https://emscripten.org/docs/tools_reference/emcc.html

当您在命令行中设置 emcc 时,您可以看到这个项目(我根据 python 脚本 runner.py 等制作 emcc 最终外观):

c-cpp-to-javascript

基本和有用的例子:

非常类似于 gcc :

参数:

-lGL for openGL

-s TOTAL_MEMORY=512MB --memory-init-file 1 Memory staff

--preload-file folderWithImages/--use-preload-plugins If you use assets

-I forInclude/someheader.h

-L libraryFolder/someLib.lib

-std=c11

简单运行:

./emcc -O2 a.cpp -o a.js

./emcc -O2 a.cpp -o a.html

链接:

./emcc -O2 a.cpp -o a.bc ./emcc -O2 b.cpp -o b.bc ./emcc -O2 a.bc b.bc -o project.js

或者:

获取JS

emcc -s WASM=1 myAdds.a myLib.a source1.c source2.cpp -o build.js

获取html

emcc -s WASM=1 myAdds.a myLib.a source1.c source2.cpp -o build.html

将位码文件链接在一起:

emcc project.bc libstuff.bc -o allproject.bc

将组合的位码编译成 HTML

emcc allproject.bc -o final.html

重要提示:

您不能使用现有的 .a 库并对其进行转换。您还必须使用emcc 构建库。

【讨论】:

以上是关于如何在 Emscripten 中设置 gcc 标志的主要内容,如果未能解决你的问题,请参考以下文章

shared:ERROR: BINARYEN_ROOT 在 /root/.emscripten 中设置为空值

如何在 ngCookies 中设置 httpOnly 标志?

如何在 Spring Boot 中设置同站点 cookie 标志?

如何使用 jQuery 在 css 中设置重要标志? [复制]

如何在 gcc4.9 中设置 GCC_COLORS 以发出着色诊断消息?

如何在 ember-cli 中设置标志,而不是环境?