Как установить флаги gcc в Emscripten
Я компилирую с помощью следующей команды:
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:
./configure --prefix=$HOME/emscripten-libs CC=emcc
make && make install
Затем, когда вы связываете свою программу, вы можете указать -L$HOME/emscripten-libs/lib
вместо -L/usr/local/lib
,
Изучите информацию о загрузке и настройке emsdk на вашем компьютере.
Следующая интересная ссылка:
Инструкция emcc или em++ https://emscripten.org/docs/tools_reference/emcc.html
Когда вы настраиваете emcc в командной строке, вы можете увидеть этот проект (я делаю окончательный вид emcc на основе скрипта python runner.py и т. Д.):
Основные и полезные примеры:
Довольно аналог с 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
также.