Проблема: Скомпилируйте c-код FMU из jmodelica с помощью emscripten - PullRequest
1 голос
/ 09 июля 2019

Проблема

Если я пытаюсь скомпилировать c-код (из FMU, экспортируемого JModelica) с emcc, я получаю сообщение об ошибке, что заголовочный файл "gnu / stubs-32.h" не найден.

emcc -I /usr/include/ -I /usr/include/x86_64-linux-gnu/ -I /usr/include/x86_64-linux-gnu/bits/ -I /home/osboxes/Programme/JModelica/include/RuntimeLibrary/ -I /home/osboxes/Programme/JModelica/ThirdParty/FMI/2.0/ BouncingBall.c

Ошибка

/usr/include/x86_64-linux-gnu/gnu/stubs.h:7:11 fatal error: 'gnu/stubs-32.h' file not found

Я уже пытался предоставить компилятору необходимые заголовочные файлы, установив libc6-dev: i386.Но это не сработает из-за компиляции 32-битного программного обеспечения на 64-битной машине. ребята из emscripten уже сказали мне, что нет работающей 32-битной версии компилятора emcc.Так что я думаю, что единственный путь - это продолжить работу с 64-битным ...

Я нашел в gnu / stubs.h файл, который отвечает за выбор неправильного заголовочного файла:

#if !defined __x86_64__
# include <gnu/stubs-32.h>
#endif
#if defined __x86_64__ && defined __LP64__
# include <gnu/stubs-64.h>
#endif
#if defined __x86_64__ && defined __ILP32__
# include <gnu/stubs-x32.h>
#endif

Поэтому я прихожу к выводу, что __LP64__ не определен, но должен быть определен, чтобы иметь возможность использовать 64-битные файлы заголовков.

Кто-нибудь имеет в виду, как я могу скомпилировать c-код с emcc?


Моя среда:

  • Ubuntu 18.10 (64-разрядная версия)
  • JModelica (версия r12614)
  • Emscripten(emcc: 1.3820 / clang: 6.0.1 / Цель: x86_64-unknown-linux-gnu / выбранный gcc: / usr / lib / gcc / x86_64-linux-gnu / 8)

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

Исходная папка FMU из JModelica содержит только c-файлы. Вот почему я должен взять заголовочные файлы откуда-то еще.

JModelica: папка источников в FMU

OpenModelica: исходная папка в FMU

0 голосов
/ 11 июля 2019

Прежде всего, зачем вам явно указывать системные заголовки?

  • если вы просто хотите связать с libc, тогда это должно быть достигнуто по умолчанию
  • если вам нужна какая-то определенная библиотека, вам придется создать ее самостоятельно, но для некоторых библиотек, таких как Zlib или SDL, вы можете использовать Emscripten Ports , встроенный в emcc

По разрядности компилятора: вы, вероятно, используете 64-битный emcc компилятор (я не знаю, существует ли он как 32-битный исполняемый файл , я использую 64-битный ), но генерируемый им код на данный момент является по сути AFAIK 32-разрядным.

Между тем, вы специально привязаны к JModelica? Я не знаком с JModelica, но OpenModelica в Linux генерирует FMU с каталогом sources внутри с помощью скрипта configure, поэтому, возможно, можно запустить что-то вроде emconfigure ./configure CC=-m32 (поэтому он будет нацелен на 32- битовый код при случайном возврате к нативной компиляции из emconfigure, если он все еще применим). Тогда вы можете использовать emmake make и т. Д., Как описано в документации Emscripten. Надеюсь, что лицензия на OpenModelica приемлема ...

Между тем книга Modelica by Example уже использует каким-то образом OpenModelica + Emscripten для обеспечения симуляции в браузере.

...