compilation - 使用 Emscripten 构建时如何包含库头?
问题描述
我正在尝试在 Ubuntu 18.04 上构建codecbox.js,这涉及使用 emcc 构建 FFmpeg。我一直被误导性libmp3lame >= 3.98.3 not found
错误所困扰。就我而言,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
. 这消除了错误,但引入了许多其他错误。
然后我读到(例如这里)我不应该使用本地系统头文件,当我添加选项时会发生这种情况-I/usr/include
。
那么,在使用 SDK 中提供的 Emscripten 捆绑系统头文件时,确保 emcc 找到我的库头文件的正确方法是什么?
解决方案
/usr/include/lame
听起来您正在使用系统安装来构建它。但是,您不应该使用任何系统范围的包构建 emscriten 模块。想象一下,您正在将 emscripten 编译的包分发到 Web,而不是其他人的桌面。您可能希望手动获取 ffmpeg 和其他相关库的源代码。
推荐阅读
- angular-routing - 使用Angular 8路由到不同组件的问题
- utf-8 - 带有 Symfony4 序列化编码的 JMSSerializer
- c# - ASP.NET 项目未在 app_data 中创建 .mdf 文件
- openssl - 使用 pyenv 在 Ubuntu 14.04 上编译 Python 3.7
- typo3 - 如何将 switchableControllerActions 转发到 TYPO3 中的另一个控制器操作
- azure - Azure App Service Container 不断重启
- r - 串扰打印R中的选定项目
- java - 数组排序不起作用,不存在变量 T 的实例,因此 Employee 符合 Comparable
- c# - Wpf datagrid获取底层对象单元格值
- reactjs - 在反应应用程序中使用 env-cmd 的问题