如果我尝试使用emcc编译c代码(从JModelica导出的FMU),则会收到错误消息,提示未找到头文件“ gnu / stubs-32.h”。
Intent repeatIntent = new Intent(this, repeatDialog.class);
startActivity(repeatIntent);
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
我已经尝试通过安装libc6-dev:i386为编译器提供所需的头文件。但是,由于在64位计算机上编译32位软件,因此无法正常工作。 guys from emscripten已经告诉我,没有可用的32位版本的emcc编译器。所以我认为唯一的方法就是继续使用64位...
我在gnu / stubs.h中找到了负责选择错误头文件的文件:
/usr/include/x86_64-linux-gnu/gnu/stubs.h:7:11 fatal error: 'gnu/stubs-32.h' file not found
因此,我得出结论,#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
没有定义,但是应该定义为能够使用64位头文件。
有人知道我如何使用emcc编译C代码吗?
我的环境:
答案 0 :(得分:0)
首先,为什么需要显式指定系统头?
libc
,则默认情况下应该实现emcc
关于编译器的重要性:您可能使用64位emcc
编译器(我不知道它是否以32位可执行文件存在,我使用64位位),但它生成的代码目前是AFAIK固有的32位。
同时,您是否专门与JModelica绑定?我不熟悉JModelica,但是Linux上的OpenModelica生成的FMU带有sources
脚本内的configure
目录,因此一个人可能会运行类似emconfigure ./configure CC=-m32
的东西(因此它如果意外地从emconfigure
回退到本机编译(如果仍然适用),它将定位32位代码。然后,您可以使用emmake make
等,如Emscripten文档中所述。希望OpenModelica的运行时许可证可以接受...
与此同时,Modelica by Example书already uses以某种方式通过OpenModelica + Emscripten提供浏览器内仿真。
答案 1 :(得分:0)
JModelica的FMU的源文件夹仅包含c文件。那就是为什么我必须从其他地方获取头文件。