2013-04-02 226 views
2

我想在Windows上使用Emscripten在JavaScript中转换C库。我使用教程here来设置emscripten和LLVM/Clang来开始。我LLVM编译使用Visual Studio 2010铛的版本是:Windows.h找不到使用emscripten

铛版本3.2(标签/ RELEASE_32 /决赛)
目标:为i686-PC-win32的
线程模型:POSIX

在命令行,我写这行编译我的文件:

C:\ emscripten>蟒蛇EMCC -v \ mypath中\ myfile.c文件

,这是输出,最终我得到的错误(和原因 我问帮助...)

emcc: compiling to bitcode 
emcc: compiling source file: \mypath\myfile.c 
emcc running: C:\llvm\build\bin\release\clang -m32 -U__i386__ -U__x86_64__ -U__i 
386 -U__x86_64 -Ui386 -Ux86_64 -U__SSE__ -U__SSE2__ -U__MMX__ -UX87_DOUBLE_ROUND 
ING -UHAVE_GCC_ASM_FOR_X87 -DEMSCRIPTEN -U__STRICT_ANSI__ -U__CYGWIN__ -D__STDC_ 
_ -Xclang -triple=i386-pc-linux-gnu -D__IEEE_LITTLE_ENDIAN -fno-math-errno -fno- 
ms-compatibility -nostdinc -Xclang -nobuiltininc -Xclang -nostdsysteminc -Xclang 
-isystemC:\emscripten\system\local\include -Xclang -isystemC:\emscripten\system 
\include\libcxx -Xclang -isystemC:\emscripten\system\include -Xclang -isystemC:\ 
emscripten\system\include\emscripten -Xclang -isystemC:\emscripten\system\includ 
e\bsd -Xclang -isystemC:\emscripten\system\include\libc -Xclang -isystemC:\emscr 
ipten\system\lib\libcxxabi\include -Xclang -isystemC:\emscripten\system\include\ 
gfx -Xclang -isystemC:\emscripten\system\include\net -Xclang -isystemC:\emscript 
en\system\include\SDL -U__APPLE__ -U__linux__ -D_LIBCPP_HAS_NO_DELETED_FUNCTIONS 
-v -emit-llvm -c \mypath\myfile.c -o C:\tempo\tmpn8yiq5\myfile_0.o 
clang version 3.2 (tags/RELEASE_32/final) 
Target: i686-pc-win32 
Thread model: posix 
"C:/llvm/build/bin/release/clang.exe" -cc1 -triple i686-pc-win32 -emit-llvm-bc 
-disable-free -disable-llvm-verifier -main-file-name myfile.c -mrelocation-mod 
el static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -target-cpu pent 
ium4 -momit-leaf-frame-pointer -v -coverage-file "C:\\tempo\\tmpn8yiq5\\myfile_0 
.o" -nostdsysteminc -nobuiltininc -resource-dir "C:/llvm/build/bin/release\\.. 
\\lib\\clang\\3.2" -U __i386__ -U __x86_64__ -U __i386 -U __x86_64 -U i386 -U x8 
6_64 -U __SSE__ -U __SSE2__ -U __MMX__ -U X87_DOUBLE_ROUNDING -U HAVE_GCC_ASM_FO 
R_X87 -D EMSCRIPTEN -U __STRICT_ANSI__ -U __CYGWIN__ -D __STDC__ -D __IEEE_LITTL 
E_ENDIAN -U __APPLE__ -U __linux__ -D _LIBCPP_HAS_NO_DELETED_FUNCTIONS -fmodule- 
cache-path "C:\\Users\\SS\\AppData\\Local\\Temp\\clang-module-cache" -ferror-lim 
it 19 -fmessage-length 80 -mstackrealign -fms-extensions -fmsc-version=1300 -fde 
layed-template-parsing -fobjc-runtime=gcc -fobjc-default-synthesize-properties - 
fdiagnostics-show-option -fcolor-diagnostics -triple=i386-pc-linux-gnu -nobuilti 
ninc -nostdsysteminc "-isystemC:\\emscripten\\system\\local\\include" "-isystemC 
:\\emscripten\\system\\include\\libcxx" "-isystemC:\\emscripten\\system\\include 
" "-isystemC:\\emscripten\\system\\include\\emscripten" "-isystemC:\\emscripten\ 
\system\\include\\bsd" "-isystemC:\\emscripten\\system\\include\\libc" "-isystem 
C:\\emscripten\\system\\lib\\libcxxabi\\include" "-isystemC:\\emscripten\\system 
\\include\\gfx" "-isystemC:\\emscripten\\system\\include\\net" "-isystemC:\\emsc 
ripten\\system\\include\\SDL" -o "C:\\tempo\\tmpn8yiq5\\myfile_0.o" -x c "\\mypa 
th\\myfile.c" 
clang -cc1 version 3.2 based upon LLVM 3.2svn default target i686-pc-win32 
ignoring nonexistent directory "C:\emscripten\system\local\include" 
#include "..." search starts here: 
#include <...> search starts here: 
C:\emscripten\system\include\libcxx 
C:\emscripten\system\include 
C:\emscripten\system\include\emscripten 
C:\emscripten\system\include\bsd 
C:\emscripten\system\include\libc 
C:\emscripten\system\lib\libcxxabi\include 
C:\emscripten\system\include\gfx 
C:\emscripten\system\include\net 
C:\emscripten\system\include\SDL 
End of search list. 
\mypath\myfile.c:4:10: fatal error: 'windows.h' 
     file not found 
#include <windows.h> 
     ^
1 error generated. 
emcc: compiler frontend failed to generate LLVM bitcode, halting 

的C语言文件不使用任何MFC并按照我的理解,铿锵的3.2版本应该能够使用标准的Windows API。我检查了Windows.h是否可以找到,它位于C:\ Program Files文件(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Include

我错过了一些东西,比如配置或标志指定我正在用Win32编译?我还注意到,在llvm存储库中,有位于lib/Support/Windows中的Windows.h文件,但我不知道它的用途是什么。这看起来像某种可移植包装器,以使用来自不同库的标准C++。

我不知道该从哪里去,任何帮助将不胜感激。

+1

你的编译器不应该包含“-I C:/ Program Files(x86)/ Microsoft SDKs/Windows/v7.1A/Include”吗? – Jay

+0

这就是我最初的想法,但由于emcc被用于交叉编译,它使用了与Emscripten捆绑在一起的系统头文件。在Emscripten教程中指定:“需要注意的一点是,如果您构建了硬编码的项目,例如-I/usr/include/something:使用系统标题时,如果您交叉编译,因为头文件是针对你的本地系统的,而不是你实际构建的平台。“ –

+0

我不认为emscripten带有WinAPI实现 - 它不是[默认发行版](https://github.com/kripken/emscripten/tree/master/system/include)的一部分,我不确定它是否是'很快就会发生:基本上,你需要移植葡萄酒...... – Christoph

回答

-1

Emscripten多年平均值有个文件,如WINDOWS.H或OSX的可可等

唯一的解决办法是你的代码移植到SDL的必要的JavaScript端口,如SDL是emscripten可用,因此它的头。