Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Emscripten将Hello Word从Swift编译为JavaScript_Javascript_Llvm_Swift_Emscripten - Fatal编程技术网

如何使用Emscripten将Hello Word从Swift编译为JavaScript

如何使用Emscripten将Hello Word从Swift编译为JavaScript,javascript,llvm,swift,emscripten,Javascript,Llvm,Swift,Emscripten,给定最简单的swift文件: println("lol") 使用xcrun swift-i lol.swift在命令行上运行此命令很简单,或者使用xcrun swift lol.swift-o lol编译为可执行文件,但是如何为emscripten提供一个简单的概念证明呢 我以前没有使用EnScript,但是用C++从World中得到了一个hello World示例,并且也想编译我的银行代码。 我试过了 xcrun swift lol.swift -emit-bc -o lol.bc emcc

给定最简单的swift文件:

println("lol")
使用
xcrun swift-i lol.swift
在命令行上运行此命令很简单,或者使用
xcrun swift lol.swift-o lol
编译为可执行文件,但是如何为emscripten提供一个简单的概念证明呢

我以前没有使用EnScript,但是用C++从World中得到了一个hello World示例,并且也想编译我的银行代码。 我试过了

xcrun swift lol.swift -emit-bc -o lol.bc
emcc lol.bc
但是得到

Value:   %1 = call { i8*, i64, i64 } @_TFSS37_convertFromBuiltinUTF16StringLiteralfMSSFTBp17numberOfCodeUnitsBw_SS(i8* bitcast ([4 x i16]* @0 to i8*), i64 3)
LLVM ERROR: Unrecognized struct value
Traceback (most recent call last):
  File "/Users/glen/Downloads/emsdk_portable/emscripten/1.16.0/emcc", line 1540, in <module>
shared.Building.llvm_opt(final, link_opts)
  File "/Users/glen/Downloads/emsdk_portable/emscripten/1.16.0/tools/shared.py", line 1267, in llvm_opt
assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:
值:%1=调用{i8*,i64,i64}@TFSS37_ConvertFromBuiltNutF16StringLiteralFMSSTFTBP17NumberOfCodeUnitsBw_SS(i8*比特广播([4 x i16]*@0到i8*),i64 3)
LLVM错误:无法识别的结构值
回溯(最近一次呼叫最后一次):
文件“/Users/glen/Downloads/emsdk_-portable/emscripten/1.16.0/emcc”,第1540行,在
shared.Building.llvm_opt(最终链接选项)
文件“/Users/glen/Downloads/emsdk_portable/emscripten/1.16.0/tools/shared.py”,第1267行,在llvm_opt中
assert os.path.exists(目标),'未能运行llvm优化:'+输出
AssertionError:无法运行llvm优化:

想法?

问题是LLVM在链接过程中找不到该调用中使用的类型/符号。这些符号很可能特定于swift框架。如果使用
-v
选项运行
emcc
,则可以获得更多调试信息。您也可以考虑提供LLVM选择提示信息可以在哪里找到。 我运行了
xcrunswift-v test.swift
以查看实际执行的命令

Swift version 1.0 (swift-600.0.34.4.5)
Target: x86_64-apple-darwin13.2.0
/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file test.swift -enable-objc-attr-requires-objc-module -target x86_64-apple-darwin13.2.0 -module-name test -color-diagnostics -o     /var/folders/69/l9w0zkqn38s1td4_gm5c__km0000gn/T/test-d800d3.o
/usr/bin/ld /var/folders/69/l9w0zkqn38s1td4_gm5c__km0000gn/T/test-d800d3.o -force_load /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a -lSystem -arch x86_64 -L /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -rpath /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx -macosx_version_min 10.9.0 -no_objc_category_merging -o test

您可以考虑探索如何将这些链接选项应用于EXPRESTON以获得您想要的。不会有任何关于这方面的文档,因为我认为他们不打算像这样使用swift

根据您在Emscripten回购协议上提交的文件,您试图做的是不可能的:

不幸的是,无法将.dylib文件链接到Emscripten。原因是.dylibs已经包含x86/x64的本机机器代码,Emscripten无法“返回”并将其再次发送到LLVM IR表单

--juj(GitHub用户),在