Skip to content

[SR-7038] in 4.1, -static-stdlib doesn't seem to work anymore #49586

Closed
@weissi

Description

@weissi
Previous ID SR-7038
Radar rdar://problem/37710244
Original Reporter @weissi
Type Bug
Status Resolved
Resolution Done
Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, 4.1Regression
Assignee @compnerd
Priority Medium

md5: 3fe03957d3ec077a1ac3669583413927

Issue Description:

repro:

  • create a new SwiftPM package (cd /tmp && mkdir test && cd test && swift package init --type=executable

  • try to build (rm -rf .build && swift build -Xswiftc -static-stdlib)

alternatively

echo 'print("hello")' > /tmp/test.swift
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/bin/swiftc -o /tmp/test -static-executable /tmp/test.swift

expected:

with 4.0.2 release it works fine:

$ rm -rf .build && /usr/local/swift/swift-4.0.2-RELEASE-ubuntu16.04/usr/bin/swift build -Xswiftc -static-stdlib && .build/x86_64-unknown-linux/debug/test
Compile Swift Module 'test' (1 sources)
Linking ./.build/x86_64-unknown-linux/debug/test
Hello, world!

actual

with today's 4.1 dev snapshot ({{swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a }}) however:

$ rm -rf .build && /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/bin/swift build -Xswiftc -static-stdlib && .build/x86_64-unknown-linux/debug/test
Compile Swift Module 'test' (1 sources)
Linking ./.build/x86_64-unknown-linux/debug/test
/usr/bin/ld.gold: error: cannot find -lswiftImageInspectionShared
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift/linux/x86_64/swiftrt.o:/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/SwiftRT-ELF.cpp:function swift_image_constructor(): error: undefined reference to 'swift_addNewDSOImage'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(Errors.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/Errors.cpp:function swift::dumpStackTraceEntry(unsigned int, void*, bool): error: undefined reference to 'swift::lookupSymbol(void const*, swift::SymbolInfo*)'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(MetadataLookup.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/MetadataLookup.cpp:function swift::Lazy<TypeMetadataState>::defaultInitCallback(void*): error: undefined reference to 'swift::initializeTypeMetadataRecordLookup()'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(ProtocolConformance.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/ProtocolConformance.cpp:function swift::Lazy<ConformanceState>::defaultInitCallback(void*): error: undefined reference to 'swift::initializeProtocolConformanceLookup()'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
error: terminated(1): /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/bin/swift-build-tool -f /tmp/test/.build/debug.yaml main output:

things that are odd:

lswiftImageInspectionShared/Static seems gone:

in the .lnk file, it still lists -lswiftImageInspectionStatic:

$ grep -H . *.lnk | grep swift
static-executable-args.lnk:-lswiftCore
static-executable-args.lnk:-lswiftImageInspectionStatic
static-stdlib-args.lnk:-lswiftCore
static-stdlib-args.lnk:-lswiftImageInspectionShared

but

$ find /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/ -iname '*imageinspec*' | wc -l
0

However, removing those -lswiftImageInspection* entries from the .lnk files also doesn't seem to fix it:

$ rm -rf .build && /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/bin/swift build -Xswiftc -static-stdlib && .build/x86_64-unknown-linux/debug/test
Compile Swift Module 'test' (1 sources)
Linking ./.build/x86_64-unknown-linux/debug/test
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift/linux/x86_64/swiftrt.o:/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/SwiftRT-ELF.cpp:function swift_image_constructor(): error: undefined reference to 'swift_addNewDSOImage'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(Errors.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/Errors.cpp:function swift::dumpStackTraceEntry(unsigned int, void*, bool): error: undefined reference to 'swift::lookupSymbol(void const*, swift::SymbolInfo*)'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(MetadataLookup.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/MetadataLookup.cpp:function swift::Lazy<TypeMetadataState>::defaultInitCallback(void*): error: undefined reference to 'swift::initializeTypeMetadataRecordLookup()'
/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/lib/swift_static/linux/libswiftCore.a(ProtocolConformance.cpp.o):/home/buildnode/jenkins/workspace/oss-swift-4.1-package-linux-ubuntu-16_04/swift/stdlib/public/runtime/ProtocolConformance.cpp:function swift::Lazy<ConformanceState>::defaultInitCallback(void*): error: undefined reference to 'swift::initializeProtocolConformanceLookup()'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
error: terminated(1): /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-02-19-a-ubuntu16.04/usr/bin/swift-build-tool -f /tmp/test/.build/debug.yaml main output:

so maybe libswiftImageIntrospection* is still needed but no longer part of the distribution?

Metadata

Metadata

Assignees

Labels

bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.compilerThe Swift compiler itselfregressionswift 4.1

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions