Linux static-executable linking errors

Is this still working for everyone on newer versions (currently using 5.6.2)? I'm trying with 5.6.2 on Ubuntu 20.04 and having issues.

I tried invoking:

swift build -c release -Xswiftc -static-stdlib -v

And this is the output (I built release just before, so it didn't bother compiling everything):

lsb_release -r
/home/dtmanager/.swift/usr/bin/swiftc -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -emit-supported-features /tmp/TemporaryDirectory.4Jwmb4/dummyInput-1.swift
/home/dtmanager/.swift/usr/bin/swiftc -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -print-target-info
/home/dtmanager/.swift/usr/bin/swift-frontend -frontend -emit-supported-features /tmp/TemporaryDirectory.YZJdA7/dummyInput-2.swift
Building for production...
/home/dtmanager/.swift/usr/bin/swiftc -lstdc++ -g -L /home/dtmanager/DTManager/.build/x86_64-unknown-linux-gnu/release -o /home/dtmanager/DTManager/.build/x86_64-unknown-linux-gnu/release/DTManager -module-name DTManager -emit-executable -Xlinker --defsym -Xlinker main=DTManager_main -Xlinker '-rpath=$ORIGIN' @/home/dtmanager/DTManager/.build/x86_64-unknown-linux-gnu/release/DTManager.product/Objects.LinkFileList -target x86_64-unknown-linux-gnu -lz -static-stdlib -L /home/dtmanager/.swift/usr/lib
error: link command failed with exit code 254 (use -v to see invocation)
clang-13: error: unable to execute command: Killed
clang-13: error: linker command failed due to signal (use -v to see invocation)

Could be a linker OOM, you can try using lld instead with -Xclang-linker -fuse-ld=lld

How should I use that? Do I just append it to the previous command? Because when I try this:

swift build -c release -Xswiftc -static-stdlib -Xclang-linker -fuse-ld=lld

It tells me:

error: Missing value for '-c '

Ah sorry with SwiftPM I think it's more complicated, I think you need -Xswiftc -Xclang-linker -Xswiftc -fuse-ld=lld

Awesome, thanks for the help! I’ll give it a try.

I agreed @Keith , it is a linker OOM.
You should add swap to 4GB.

1 Like