Skip to content

Instantly share code, notes, and snippets.

@ianpartridge
Created May 1, 2019 09:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ianpartridge/5317b30ccaac46f6b095a92d09258ead to your computer and use it in GitHub Desktop.
Save ianpartridge/5317b30ccaac46f6b095a92d09258ead to your computer and use it in GitHub Desktop.
The effect of linking Foundation on Linux

Without Foundation:

# swift package init --type executable && swift run
Creating executable package: bare
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/bare/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/bareTests/
Creating Tests/bareTests/bareTests.swift
Creating Tests/bareTests/XCTestManifests.swift
[2/2] Linking ./.build/x86_64-unknown-linux/debug/bare
Hello, world!

# ldd ./.build/x86_64-unknown-linux/debug/bare
	linux-vdso.so.1 (0x00007fffbcfde000)
	libswiftSwiftOnoneSupport.so => /usr/lib/swift/linux/libswiftSwiftOnoneSupport.so (0x00007facd4ba2000)
	libswiftCore.so => /usr/lib/swift/linux/libswiftCore.so (0x00007facd44a8000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007facd411f000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007facd3d81000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007facd3b69000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007facd3778000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007facd3559000)
	libatomic.so.1 => /usr/lib/x86_64-linux-gnu/libatomic.so.1 (0x00007facd3351000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007facd314d000)
	libicui18nswift.so.61 => /usr/lib/swift/linux/libicui18nswift.so.61 (0x00007facd2c57000)
	libicuucswift.so.61 => /usr/lib/swift/linux/libicuucswift.so.61 (0x00007facd2877000)
	libicudataswift.so.61 => /usr/lib/swift/linux/libicudataswift.so.61 (0x00007facd0cd2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007facd49c4000)

With Foundation:

# swift package init --type executable
Creating executable package: foundation
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/foundation/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/foundationTests/
Creating Tests/foundationTests/foundationTests.swift
Creating Tests/foundationTests/XCTestManifests.swift

# echo "import Foundation" >> Sources/foundation/main.swift

# swift run
[2/2] Linking ./.build/x86_64-unknown-linux/debug/foundation
Hello, world!

# ldd ./.build/x86_64-unknown-linux/debug/foundation
	linux-vdso.so.1 (0x00007ffc8091d000)
	libFoundation.so => /usr/lib/swift/linux/libFoundation.so (0x00007f8aaddb6000)
	libswiftCore.so => /usr/lib/swift/linux/libswiftCore.so (0x00007f8aad89a000)
	libswiftGlibc.so => /usr/lib/swift/linux/libswiftGlibc.so (0x00007f8aae906000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8aad67b000)
	libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8aad478000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8aad274000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8aaced6000)
	libswiftDispatch.so => /usr/lib/swift/linux/libswiftDispatch.so (0x00007f8aae8cb000)
	libdispatch.so => /usr/lib/swift/linux/libdispatch.so (0x00007f8aae86c000)
	libBlocksRuntime.so => /usr/lib/swift/linux/libBlocksRuntime.so (0x00007f8aaccd3000)
	libswiftSwiftOnoneSupport.so => /usr/lib/swift/linux/libswiftSwiftOnoneSupport.so (0x00007f8aae829000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8aac94a000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8aac732000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8aac341000)
	libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f8aac0c2000)
	libicuucswift.so.61 => /usr/lib/swift/linux/libicuucswift.so.61 (0x00007f8aabce2000)
	libicui18nswift.so.61 => /usr/lib/swift/linux/libicui18nswift.so.61 (0x00007f8aab7ec000)
	libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f8aab42b000)
	libatomic.so.1 => /usr/lib/x86_64-linux-gnu/libatomic.so.1 (0x00007f8aab223000)
	libicudataswift.so.61 => /usr/lib/swift/linux/libicudataswift.so.61 (0x00007f8aa967e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f8aae6f0000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f8aa9469000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8aa9261000)
	libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f8aa903c000)
	libidn2.so.0 => /usr/lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f8aa8e1f000)
	librtmp.so.1 => /usr/lib/x86_64-linux-gnu/librtmp.so.1 (0x00007f8aa8c03000)
	libpsl.so.5 => /usr/lib/x86_64-linux-gnu/libpsl.so.5 (0x00007f8aa89f5000)
	libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f8aa878b000)
	libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f8aa8313000)
	libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f8aa80c8000)
	libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007f8aa7e76000)
	liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007f8aa7c68000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8aa7a4b000)
	libicuuc.so.60 => /usr/lib/x86_64-linux-gnu/libicuuc.so.60 (0x00007f8aa7694000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f8aa746e000)
	libunistring.so.2 => /usr/lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f8aa70f0000)
	libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f8aa6d8b000)
	libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f8aa6b57000)
	libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f8aa6921000)
	libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f8aa66a0000)
	libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f8aa63ca000)
	libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f8aa6198000)
	libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f8aa5f94000)
	libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f8aa5d89000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f8aa5b6e000)
	libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f8aa5953000)
	libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007f8aa5712000)
	libicudata.so.60 => /usr/lib/x86_64-linux-gnu/libicudata.so.60 (0x00007f8aa3b69000)
	libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f8aa383a000)
	libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f8aa3627000)
	libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f8aa3423000)
	libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007f8aa321a000)
	libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007f8aa2f8d000)
	libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007f8aa2ceb000)
	libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007f8aa2ab5000)
	libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007f8aa289f000)
	libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f8aa2697000)
	libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007f8aa246e000)
	libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007f8aa225f000)
	libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007f8aa2015000)
	libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f8aa1d0c000)
	libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8aa1ad4000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment