I would like to execute a compiled Swift script on a computer that does not have Swift. But apparently, Swift Compiler uses dynamically linked libraries. Is it possible to include these libraries statically?
Steps to play using Docker:
user@host :~# docker run -it swiftdocker/swift root@16974ad4e db1:/# swift --version Swift version 3.0-dev (LLVM dffa09ffd8, Clang 9f0d189820, Swift 1c720b8f84) Target: x86_64-unknown-linux-gnu root@16974ad4edb1 :/# echo 'print("Hello, world")' > helloworld.swift root@16974ad4edb1 :/# swiftc helloworld.swift root@16974ad4edb1 :/# ./helloworld Hello, world root@16974ad4edb1 :/# exit exit user@host :~# docker cp 16974ad4edb1:/helloworld . user@host :~# file helloworld helloworld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=c4d42f6185b3d53ecf2dfb0c386263c17cb34675, not stripped user@host :~# ./helloworld ./helloworld: error while loading shared libraries: libswiftCore.so: cannot open shared object file: No such file or directory
The -static-stdlib should be used:
-static-stdlib
swiftc -static-stdlib helloworld.swift
For swift build go to -Xswiftc :
swift build
-Xswiftc
swift build -Xswiftc -static-stdlib
If you get an ICU dependency error, install it:
apt-get install libicu-dev