如何在 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获取html
emcc -s WASM=1 myAdds.a myLib.a source1.c source2.cpp -o build.js
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 中设置重要标志? [复制]