wilsony
(Wilson Yu)
1
Hi developers,
I've successfully built the swift compiler using Ninja by following the instructions listed in the Getting Started document. However, when I tried to execute swiftc and swift respectively in the build directory, I got the following errors:
Command I used to invoke swiftc:
<my build directory>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/bin/swiftc test.swift -o test
The output I got:
ld: library not found for -lobjc
:0: error: link command failed with exit code 1 (use -v to see invocation)
and after I added the -v option, I got the following output
Swift version 5.4-dev (LLVM 1044437905e95a4, Swift d622bdca3a5d1fd)
Target: x86_64-apple-darwin20.3.0
<my build direcory>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/bin/swift-frontend -frontend -c -primary-file test.swift -target x86_64-apple-darwin20.3.0 -enable-objc-interop -module-name test -o /var/folders/zx/1t__6cgd5rdblpb72g6fbz2h0000gn/T/test-e50629.o
/usr/bin/ld /var/folders/zx/1t__6cgd5rdblpb72g6fbz2h0000gn/T/test-e50629.o <my build directory>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/lib/swift/clang/lib/darwin/libclang_rt.osx.a -lobjc -lSystem -arch x86_64 -L <my build direcotry>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/lib/swift/macosx -platform_version macos 11.0.0 0.0.0 -no_objc_category_merging -o test
ld: library not found for -lobjc
:0: error: link command failed with exit code 1 (use -v to see invocation)
Command I used to invoke swift:
<my build directory>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/bin/swift
and I got the following output:
<unknown>:0: error: fatal error encountered during compilation; please submit a bug report (Swift.org - Contributing) and include the project
:0: note: Compiler-internal integrated REPL has been removed; use the LLDB-enhanced REPL instead.
Please submit a bug report (Swift.org - Contributing) and include the project and the crash backtrace.
Stack dump:
0. Program arguments: <my build directory>/Ninja-RelWithDebInfoAssert/swift-macosx-x86_64/bin/swift-frontend -frontend -repl -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -color-diagnostics -target-sdk-version 11.1 -module-name REPL
- Swift version 5.4-dev (LLVM 1044437905e95a4, Swift d622bdca3a5d1fd)
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var LLVM_SYMBOLIZER_PATH to point to it):
0 swift-frontend 0x0000000105680497 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1 swift-frontend 0x000000010567f565 llvm::sys::RunSignalHandlers() + 85
2 swift-frontend 0x0000000105680ac6 SignalHandler(int) + 262
3 libsystem_platform.dylib 0x00007fff2053ed7d _sigtramp + 29
4 libsystem_platform.dylib 0x000000011af946c0 _sigtramp + 18446603344721303904
5 libsystem_c.dylib 0x00007fff2044d720 abort + 120
6 swift-frontend 0x00000001009a2305 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*)::$_2::__invoke(void*, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, bool) + 725
7 swift-frontend 0x00000001055d14db llvm::report_fatal_error(llvm::Twine const&, bool) + 267
8 swift-frontend 0x00000001055d13cb llvm::report_fatal_error(char const*, bool) + 43
9 swift-frontend 0x00000001009a1e8d swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 10941
10 swift-frontend 0x000000010093ade7 main + 519
11 libdyld.dylib 0x00007fff20515621 start + 1
zsh: abort
My development environment:
Xcode 12.4
Python 3.8.2
macOS 11.2
cmake 3.19.4
ninja 1.10.2
All commands were invoked with the working directory being the directory that contains the swift source code I want to run those two programs on
Could you help me with that?
Thank you so much
owenv
(Owen Voorhees)
2
This error is an indirect result of the compiler not finding your SDK. Specifying it with -sdk should work (you can use xcrun --show-sdk-path to find the default path)
The REPL error is being reported because LLDB (which powers it) can’t be found. The easiest way to build and test it is to include —lldb in your build-script invocation, and then run it directly from the build folder using /path/to/lldb —repl.
Hope this helps!
wilsony
(Wilson Yu)
3
Thank you! It works! By the way, I wonder how I can make it automatically detect the path to the SDK without manually specifying it with -sdk?
owenv
(Owen Voorhees)
4
When using ‘swiftc’, you can also specify the sdk using the SDKROOT environment variable, but it will never be set completely automatically. When using ‘swift’, it will use xcrun to find the sdk on macOS if you don’t specify one since that’s intended to be more of an interactive tool
wilsony
(Wilson Yu)
6
For this, do I need to do a clean build with --lldb option enabled?
owenv
(Owen Voorhees)
7
If you add —lldb to your original invocation I think it will probably work without a clean build, but I could be wrong
wilsony
(Wilson Yu)
8
Thanks. I tried but it said the --lldb option is unknown to swift
owenv
(Owen Voorhees)
9
Oh sorry, I meant you’ll need to pass it to build-script, so probably something like this:
utils/build-script --skip-build-benchmarks
--skip-ios --skip-watchos --skip-tvos --swift-darwin-supported-archs "$(uname -m)"
--sccache --release-debuginfo —lldb
When you don’t plan on using/contributing to the REPL I usually don’t recommend building it though because it’s a pretty large project.