【发布时间】:2015-06-15 15:11:49
【问题描述】:
是否可以在 clang 编译的可执行文件上执行 emcc(来自 emscripten)?
我试过了,结果是:
ERROR root: pdfium_test: Input file has an unknown suffix, don't know what to do with it!
我尝试这样做是因为我无法找到使用 emcc 编译 PDFium 项目的解决方案,但使用 clang 一切都很好。
原因是:
Emscripten 是一个交叉编译器,因此特定于操作系统的宏 在构建 C/C++ 代码时,主机系统的所有内容都应该是未定义的。 如果您查看 tools/shared.py,Emscripten 会特别注意 -U Clang 可能会自动尝试添加的所有特定于主机的标志。
但是 PDFium 中有很多特定于平台的代码,所以我得到:
#error Sorry, can not figure out target OS. Please specify _FX_OS_ macro.
如果定义了__linux__宏(例如),就定义了这个宏,这里是代码sn-p:
#ifndef _FX_OS_
#if defined(__ANDROID__)
#define _FX_OS_ _FX_ANDROID_
#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_
#elif defined(_WIN32)
#define _FX_OS_ _FX_WIN32_DESKTOP_
#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
#elif defined(_WIN64)
#define _FX_OS_ _FX_WIN64_DESKTOP_
#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
#elif defined(__linux__)
#define _FX_OS_ _FX_LINUX_DESKTOP_
#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
#elif defined(__APPLE__)
#define _FX_OS_ _FX_MACOSX_
#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
#endif
#endif // _FX_OS_
#if !defined(_FX_OS_) || _FX_OS_ == 0
#error Sorry, can not figure out target OS. Please specify _FX_OS_ macro.
#endif
所以,我尝试手动定义 __linux__ 宏:
emmake make -j5 BUILDTYPE=Release __linux__=1
...但同样的错误。也许这不是好方法?
提前谢谢你。
编辑: JF Bastien 的回答对我帮助很大。但现在我有这个构建错误,我不知道该怎么做。如果有人有想法...
clang-3.7: warning: argument unused during compilation: '-msse2'
clang-3.7: warning: argument unused during compilation: '-mmmx'
error: unknown FP unit 'sse'
编辑 2: 解决上述问题:从 v8/build/toolchain.gypi 中删除“-msse2、-mmmx 和 -mfpmath”标志
【问题讨论】:
标签: c++ c clang emscripten