Как включить ncurses при использовании Emscripten emcc и make на Mac

Я пытаюсь создать проект (а именно источник Angband - http://rephial.org/downloads/3.3/angband-v3.3.2.tar.gz) с помощью emcc Emscripten, чтобы перенести его на Javascript и в конечном итоге создать онлайн-версию.

Мне удалось начать процесс с

emconfigure ./configure make

который начинает успешно генерировать файлы .o битового кода LLVM, но затем он зависает на main-gcu.c с 'main-gcu.c: 43: 11: фатальная ошибка: файл' ncurses.h 'не найден'

Я считаю, что main-gcu.c - единственный файл, который ссылается на ncurses, но я просто не могу понять, как включить библиотеку при компиляции. Есть ли способ указать включение ncurses с помощью make, или я должен скомпилировать файл main-gcu.c индивидуально с помощью emcc main-gcu.c -c -lncurses? Я попытался сделать это, но это привело к другой ошибке: emcc не смог найти другие фактически включенные файлы заголовков двумя уровнями ниже (он не смог найти заголовки, которые были включены в заголовок, включенный main-gcu.c - в любом случае, чтобы исправить это? ).

Я также не уверен, нужно ли мне устанавливать библиотеку ncurses на Mac OSX. Все, что я действительно могу найти, это ссылки на libncurses5-dev для Linux.

Спасибо!


person Intenex    schedule 26.05.2012    source источник


Ответы (1)


Я думаю, вы неправильно поняли компиляцию через Emscripten. Я постараюсь указать на несколько проблем, с которыми вы столкнулись.

  1. Общее правило заключается в том, что все инструменты Emscripten ТОЛЬКО могут преобразовывать форматы LLVM (например, BITCODE ) в JavaScript. emconfigure, emmake, ... измените среду сборки так, чтобы ваш исходный код был скомпилирован в один из форматов LLVM (есть исключения из правила, но это не важно). Таким образом, все, что вы хотите связать с вашим окончательным результатом, также должно быть в формате LLVM (что по умолчанию ncurses не является).

  2. Поскольку на выходе получается JavaScript, нет возможности выполнить какой-либо программный код в разных потоках. Хотя большая часть кода C / C ++ использует поток для пользовательского интерфейса и другие потоки для обработки, такая модель НЕ работает для Emscripten. Таким образом, для компиляции / запуска программного обеспечения вам придется переписать части, в которых используется многопоточность. См. emscripten_set_main_loop для указателей.

  3. Даже если у вас есть скомпилированные библиотеки, вам необходимо статически связать их с Emscripten. На данный момент это не техническая проблема, а скорее проблема с лицензией, поскольку, если ваша библиотека лицензирована, например, LGPL из-за статической ссылки условия GPL действуют.

Надеюсь, вся ясность окончательно улетучилась;)

person abergmeier    schedule 17.06.2012