如何在没有任何动态库的情况下编译swift?
尝试制作一个“hello,world”风格的程序,看看是否可以通过运行它来获取输出,从而在web上使用它 问题是,当我编译它时,它的位代码试图链接动态库。它似乎不需要这样做,或者似乎有人了解所有这些部分是如何组合在一起的,可以告诉我如何提供它所需要的文件(如果需要,我愿意用JavaScript实现它所依赖的一些函数) 我对环境有更全面的解释,但这是最基本的: 文件:如何在没有任何动态库的情况下编译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
$ 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标准库。谢谢。我想我会把斯威夫特推迟一年左右。只是无法激励自己去学习一门应用范围如此狭窄的语言。也许铁锈很快就会到达这里。这里有什么新进展吗?