Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
如何在没有任何动态库的情况下编译swift?_Swift_Xcode6_Llvm_Emscripten_Asm.js - Fatal编程技术网

如何在没有任何动态库的情况下编译swift?

如何在没有任何动态库的情况下编译swift?,swift,xcode6,llvm,emscripten,asm.js,Swift,Xcode6,Llvm,Emscripten,Asm.js,尝试制作一个“hello,world”风格的程序,看看是否可以通过运行它来获取输出,从而在web上使用它 问题是,当我编译它时,它的位代码试图链接动态库。它似乎不需要这样做,或者似乎有人了解所有这些部分是如何组合在一起的,可以告诉我如何提供它所需要的文件(如果需要,我愿意用JavaScript实现它所依赖的一些函数) 我对环境有更全面的解释,但这是最基本的: 文件: $ cat f.swift var message = 1 $ xcrun swiftc -emit-bc f.swift -o

尝试制作一个“hello,world”风格的程序,看看是否可以通过运行它来获取输出,从而在web上使用它

问题是,当我编译它时,它的位代码试图链接动态库。它似乎不需要这样做,或者似乎有人了解所有这些部分是如何组合在一起的,可以告诉我如何提供它所需要的文件(如果需要,我愿意用JavaScript实现它所依赖的一些函数)

我对环境有更全面的解释,但这是最基本的:

文件:

$ cat f.swift
var message = 1
$ xcrun swiftc -emit-bc f.swift -o f.bc
$ emcc f.bc
WARNING: Linking two modules of different data layouts: '/Users/josh/.emscripten_cache/libc.bc' is 'e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'e-m:o-i64:64-f80:128-n8:16:32:64-S128'
WARNING: Linking two modules of different target triples: /Users/josh/.emscripten_cache/libc.bc' is 'asmjs-unknown-emscripten' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'x86_64-apple-darwin13.2.0'
Unknown specifier in datalayout string
UNREACHABLE executed at /Users/clb/emscripten-fastcomp/lib/IR/DataLayout.cpp:300!
0  opt                      0x00000001086d04ae llvm::sys::PrintStackTrace(__sFILE*) + 46
1  opt                      0x00000001086d07bb PrintStackTraceSignalHandler(void*) + 27
2  opt                      0x00000001086d0b4c SignalHandler(int) + 412
3  libsystem_platform.dylib 0x00007fff8b0e35aa _sigtramp + 26
4  libsystem_platform.dylib 0x00007fff6492d380 _sigtramp + 3649347056
5  opt                      0x00000001086d07eb raise + 27
6  opt                      0x00000001086d08a2 abort + 18
7  opt                      0x000000010865a7a6 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 198
8  opt                      0x0000000108416b74 llvm::DataLayout::parseSpecifier(llvm::StringRef) + 2804
9  opt                      0x0000000108415c57 llvm::DataLayout::init(llvm::StringRef) + 471
10 opt                      0x000000010749b47e llvm::DataLayout::DataLayout(llvm::StringRef) + 158
11 opt                      0x0000000107482ba5 llvm::DataLayout::DataLayout(llvm::StringRef) + 37
12 opt                      0x000000010747943c main + 3756
13 libdyld.dylib            0x00007fff8a2865fd start + 1
Stack dump:
0.  Program arguments: /Users/josh/code/emsdk_portable/clang/e1.25.0_64bit/opt /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc -strip-debug -internalize -internalize-public-api-list=main,malloc,free -globaldce -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt -enable-emscripten-cxx-exceptions -o /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc.opt.bc
Traceback (most recent call last):
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/emcc", line 1224, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/tools/shared.py", line 1357, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:
将其编译为位码:

$ cat f.swift
var message = 1
$ xcrun swiftc -emit-bc f.swift -o f.bc
$ emcc f.bc
WARNING: Linking two modules of different data layouts: '/Users/josh/.emscripten_cache/libc.bc' is 'e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'e-m:o-i64:64-f80:128-n8:16:32:64-S128'
WARNING: Linking two modules of different target triples: /Users/josh/.emscripten_cache/libc.bc' is 'asmjs-unknown-emscripten' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'x86_64-apple-darwin13.2.0'
Unknown specifier in datalayout string
UNREACHABLE executed at /Users/clb/emscripten-fastcomp/lib/IR/DataLayout.cpp:300!
0  opt                      0x00000001086d04ae llvm::sys::PrintStackTrace(__sFILE*) + 46
1  opt                      0x00000001086d07bb PrintStackTraceSignalHandler(void*) + 27
2  opt                      0x00000001086d0b4c SignalHandler(int) + 412
3  libsystem_platform.dylib 0x00007fff8b0e35aa _sigtramp + 26
4  libsystem_platform.dylib 0x00007fff6492d380 _sigtramp + 3649347056
5  opt                      0x00000001086d07eb raise + 27
6  opt                      0x00000001086d08a2 abort + 18
7  opt                      0x000000010865a7a6 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 198
8  opt                      0x0000000108416b74 llvm::DataLayout::parseSpecifier(llvm::StringRef) + 2804
9  opt                      0x0000000108415c57 llvm::DataLayout::init(llvm::StringRef) + 471
10 opt                      0x000000010749b47e llvm::DataLayout::DataLayout(llvm::StringRef) + 158
11 opt                      0x0000000107482ba5 llvm::DataLayout::DataLayout(llvm::StringRef) + 37
12 opt                      0x000000010747943c main + 3756
13 libdyld.dylib            0x00007fff8a2865fd start + 1
Stack dump:
0.  Program arguments: /Users/josh/code/emsdk_portable/clang/e1.25.0_64bit/opt /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc -strip-debug -internalize -internalize-public-api-list=main,malloc,free -globaldce -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt -enable-emscripten-cxx-exceptions -o /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc.opt.bc
Traceback (most recent call last):
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/emcc", line 1224, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/tools/shared.py", line 1357, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:
无法将位码编译为asm.js:

$ cat f.swift
var message = 1
$ xcrun swiftc -emit-bc f.swift -o f.bc
$ emcc f.bc
WARNING: Linking two modules of different data layouts: '/Users/josh/.emscripten_cache/libc.bc' is 'e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'e-m:o-i64:64-f80:128-n8:16:32:64-S128'
WARNING: Linking two modules of different target triples: /Users/josh/.emscripten_cache/libc.bc' is 'asmjs-unknown-emscripten' whereas '/Users/josh/deleteme/swift-play/f.bc' is 'x86_64-apple-darwin13.2.0'
Unknown specifier in datalayout string
UNREACHABLE executed at /Users/clb/emscripten-fastcomp/lib/IR/DataLayout.cpp:300!
0  opt                      0x00000001086d04ae llvm::sys::PrintStackTrace(__sFILE*) + 46
1  opt                      0x00000001086d07bb PrintStackTraceSignalHandler(void*) + 27
2  opt                      0x00000001086d0b4c SignalHandler(int) + 412
3  libsystem_platform.dylib 0x00007fff8b0e35aa _sigtramp + 26
4  libsystem_platform.dylib 0x00007fff6492d380 _sigtramp + 3649347056
5  opt                      0x00000001086d07eb raise + 27
6  opt                      0x00000001086d08a2 abort + 18
7  opt                      0x000000010865a7a6 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 198
8  opt                      0x0000000108416b74 llvm::DataLayout::parseSpecifier(llvm::StringRef) + 2804
9  opt                      0x0000000108415c57 llvm::DataLayout::init(llvm::StringRef) + 471
10 opt                      0x000000010749b47e llvm::DataLayout::DataLayout(llvm::StringRef) + 158
11 opt                      0x0000000107482ba5 llvm::DataLayout::DataLayout(llvm::StringRef) + 37
12 opt                      0x000000010747943c main + 3756
13 libdyld.dylib            0x00007fff8a2865fd start + 1
Stack dump:
0.  Program arguments: /Users/josh/code/emsdk_portable/clang/e1.25.0_64bit/opt /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc -strip-debug -internalize -internalize-public-api-list=main,malloc,free -globaldce -pnacl-abi-simplify-preopt -pnacl-abi-simplify-postopt -enable-emscripten-cxx-exceptions -o /var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc.opt.bc
Traceback (most recent call last):
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/emcc", line 1224, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/Users/josh/code/emsdk_portable/emscripten/1.25.0/tools/shared.py", line 1357, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:
$emcc f.bc
警告:链接两个不同数据布局的模块:'/Users/josh/.emscripten_cache/libc.bc'是'e-i1:8-i8:8-i16:16-i32:32-i64:64-f32:32-f64:64-p:32:32-v128:128-n32-S128',而'/Users/josh/deleteme/swift play/f.bc'是'e-m:o-i64:f82-0:128-n8:32-S128'
警告:链接不同目标三元组的两个模块:/Users/josh/.emscripten_cache/libc.bc'是'asmjs unknown emscripten',而'/Users/josh/deleteme/swift play/f.bc'是'x86_64-apple-darwin13.2.0'
datalayout字符串中的说明符未知
无法访问在/Users/clb/emscripten fastcomp/lib/IR/DataLayout.cpp:300执行!
0 opt 0x00000001086d04ae llvm::sys::PrintStackTrace(u sFILE*)+46
1个选项0x00000001086d07bb PrintStackTraceSignalHandler(无效*)+27
2 opt 0x00000001086d0b4c信号处理器(内部)+412
3 libsystem_platform.dylib 0x00007fff8b0e35aa_sigtramp+26
4 libsystem_platform.dylib 0x00007fff6492d380_sigtramp+3649347056
5选项0x00000001086d07eb上升+27
6选择0x00000001086d08a2中止+18
7 opt 0x000000010865a7a6 llvm::llvm_不可访问_内部(字符常量*,字符常量*,无符号整数)+198
8 opt 0x0000000108416b74 llvm::DataLayout::parseSpecifier(llvm::StringRef)+2804
9 opt 0x0000000108415c57 llvm::DataLayout::init(llvm::StringRef)+471
10 opt 0x000000010749b47e llvm::DataLayout::DataLayout(llvm::StringRef)+158
11 opt 0x0000000107482ba5 llvm::DataLayout::DataLayout(llvm::StringRef)+37
12选配件0x000000010747943c干管+3756
13 libdyld.dylib 0x00007fff8a2865fd启动+1
堆栈转储:
0程序参数:/Users/josh/code/emsdk_portable/clang/e1.25.0_64bit/opt/var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc-条带调试-内部化-内部化公共api列表=main,malloc,免费-全局缓存-pnacl abi simplify preopt-pnacl abi simplify postopt-启用emscripten cxx异常-o/var/folders/7g/mbft22555w3_2nqs_h1kbglw0000gn/T/tmp93OFuV/a.out.bc.opt.bc
回溯(最近一次呼叫最后一次):
文件“/Users/josh/code/emsdk_-portable/emscripten/1.25.0/emcc”,第1224行,在
shared.Building.llvm_opt(最终链接选项)
文件“/Users/josh/code/emsdk_-portable/emscripten/1.25.0/tools/shared.py”,第1357行,在llvm_opt中
assert os.path.exists(目标),'未能运行llvm优化:'+输出
AssertionError:无法运行llvm优化:

看来你在这里运气不好。正在生成的IR编译器不是标准的-它包含一些未升级的Apple私有更改(特别是,数据布局字符串至少是非标准的)


不,它不试图链接任何动态库。它尝试静态链接(在LLVM IR级别)所有必要的内容,特别是C标准库。

谢谢。我想我会把斯威夫特推迟一年左右。只是无法激励自己去学习一门应用范围如此狭窄的语言。也许铁锈很快就会到达这里。这里有什么新进展吗?