使用 Emscripten 构建时如何包含库头?

Posted

技术标签:

【中文标题】使用 Emscripten 构建时如何包含库头?【英文标题】:How to include library header when building with Emscripten? 【发布时间】:2019-11-13 12:52:30 【问题描述】:

我正在尝试在 Ubuntu 18.04 上构建 codecbox.js,这涉及使用 emcc 构建 FFmpeg。我一直坚持the misleading libmp3lame >= 3.98.3 not found error。就我而言,libmp3lame 安装没有问题。进一步排查FFmpeg的configure脚本,发现下面的测试文件用emcc编译失败:

#include <lame/lame.h>
#include <stdint.h>

long check_lame_set_VBR_quality(void)  return (long) lame_set_VBR_quality; 
int main(void) 
    int ret = 0;
    ret |= ((intptr_t)check_lame_set_VBR_quality) & 0xFFFF;
    return ret;

我收到fatal error: 'lame/lame.h' file not found

我在/usr/include/lame 中找到了标头,因此我尝试使用emcc -I/usr/include 进行编译。这消除了错误,但引入了许多其他错误。

然后我读到 (for example here) 我不应该使用本地系统标头,当我添加选项 -I/usr/include 时会发生这种情况。

那么,在使用 SDK 中提供的 Emscripten 捆绑系统头文件时,确保 emcc 找到我的库头文件的正确方法是什么?

【问题讨论】:

【参考方案1】:

/usr/include/lame 听起来您正在使用系统安装来构建它。 但是,您不应该使用任何系统范围的包构建 emscriten 模块。想象一下,您正在将 emscripten 编译的包分发到 Web,而不是其他人的桌面。您可能希望手动获取 ffmpeg 和其他相关库的源代码。

【讨论】:

好的,我明白了。事实上,库 lame 包含在 codecbox.js 中,所以我只需要指向它,而不是系统的。

以上是关于使用 Emscripten 构建时如何包含库头?的主要内容,如果未能解决你的问题,请参考以下文章

使用 emscripten 构建最新的 freetype [关闭]

如何跟踪 FS 被 emscripten 包含的原因?

为啥找不到静态库头?

如何设置基本的 C++/C 编译,然后为 emscripten 构建链接脚本

emscripten:我该如何解决 UnboundTypeError

包含在自制静态库头文件中使用的库