2

我使用以下命令进行编译:

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命令?

4

2 回答 2

4

您在问题中描述的命令是链接而不是编译。但是,总的来说,您应该能够替换gccemcc并且它会做正确的事情。在这种情况下,您不仅需要替换此链接命令,还需要替换用于将源代码编译为 .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.

于 2016-08-12T14:44:25.147 回答
0

在您的计算机上研究 emsdk 下载和设置。

下载 emsdk 指令

下一个兴趣链接是:

emcc 或 em++ 指令 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 库并将其转换。您还必须构建 lib emcc

于 2019-10-21T21:26:23.047 回答