2014-06-10 5 views
6

का उपयोग कर तेजी से फाइलों का सरलतम को देखते हुए जावास्क्रिप्ट को स्विफ्ट से संकलन पाने के लिए:कैसे नमस्ते वर्ड Emscripten

println("lol") 

यह xcrun swift -i lol.swift साथ कमांड लाइन पर इस चलाने के लिए या xcrun swift lol.swift -o lol साथ एक निष्पादन को संकलित करने के लिए तुच्छ है, लेकिन कैसे emscripten के लिए अवधारणा के एक साधारण सबूत के बारे में?

मैंने पहले ईएमएसक्रिप्ट का उपयोग नहीं किया है, लेकिन http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html से काम कर रहे सी ++ का उपयोग करके एक हैलो वर्ल्ड उदाहरण मिला, और मेरा स्विफ्ट कोड भी संकलित करना चाहता था।

मैं

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: 

विचार पाने की कोशिश की?

उत्तर

3

समस्या यह है कि लिंकिंग प्रक्रिया के दौरान एलएलवीएम उस कॉल में इस्तेमाल किए जाने वाले प्रकार/प्रतीकों को नहीं ढूंढ सकता है। ये प्रतीकों तेजी से तेजी से ढांचे के लिए विशिष्ट हैं। यदि आप emcc-v विकल्प के साथ चलाते हैं तो आप अधिक डीबग जानकारी प्राप्त कर सकते हैं। आप यह भी सोच सकते हैं कि --llvm-opts संकेत देते हैं कि वह जानकारी कहां मिल सकती है।

मैं xcrun swift -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 

आप की खोज कैसे इन लिंकिंग विकल्प लागू करने के लिए आप क्या चाहते हैं पाने के लिए emscripten को सोच सकते हैं। इस पर कोई दस्तावेज नहीं होगा, क्योंकि मुझे नहीं लगता कि वे इस तरह इस्तेमाल करने के लिए तेजी से इरादा रखते हैं।

2

this GitHub issue आप Emscripten रेपो को दायर के अनुसार, तुम क्या करने की कोशिश कर रहे हैं संभव नहीं है:

दुर्भाग्य से यह Emscripten करने के लिए फ़ाइलों .dylib लिंक करने के लिए संभव नहीं है। इसका कारण यह है कि .dylibs में पहले से ही x86/x64 के लिए देशी मशीन कोड होता है, और Emscripten "वापस जा सकता है" और उसे फिर से एलएलवीएम आईआर फॉर्म में नहीं ले सकता है।

- जुज (GitHub उपयोगकर्ता), पर 2014-06-14

संबंधित मुद्दे