开源 Swift 项目中的链接失败
Linking failure in open-source Swift project
我一直在关注 http://swift.org 上的 "Getting Started" 教程。创建新的 Swift "Hello World" 项目后,我 运行 shell 命令:
$ swift build
并得到以下输出:
Compiling Swift Module 'MyProject' (1 sources)
Linking MyProject
ld: library not found for -lobjc
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/bin/swift-build-tool -f /Users/petrmanek/Projekty/MyProject/.build/debug.yaml default
我假设 ld: library not found for -lobjc
意味着链接器找不到 Objective-C 标准库,但是我发现这很难相信,因为文件 /usr/lib/libobjc.A.dylib
和 /usr/lib/libobjc.dylib
存在于我的文件系统中。
我现在该怎么办?
我的配置是:
Hardware: Mac mini (Late 2012)
OS: Mac OS 10.11 El Capitan
uname -a
Darwin tywin 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
swift --version
Apple Swift version 3.0-dev (LLVM b361b0fc05, Clang 11493b0f62, Swift fc261045a5)
Target: x86_64-apple-macosx10.9
我想我已经解决了。如果有人感兴趣,这是我的解决方案。
查看 swift-build --help
选项列表,我发现了 -Xlinker
选项,它允许我直接为 ld
指定标志。我用这个选项告诉它更详细的命令:
$ swift build -Xlinker -v
输出是:
Linking MyProject
@(#)PROGRAM:ld PROJECT:ld64-242
configured to support archs: i386 x86_64 x86_64h armv6 armv7 armv7s armv7m armv7k arm64
Library search paths:
/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/lib/swift/macosx
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib
Framework search paths:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/
ld: library not found for -lobjc
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/bin/swift-build-tool -f /Users/petrmanek/Projekty/MyProject/.build/debug.yaml default
这很混乱,但我们可以看到 /usr/lib
不在库搜索路径中。我有两个选择:
- 添加
/usr/lib
作为搜索路径 - 这没有用,因为 ld
努力在我使用 [=20= 添加的每个搜索路径前添加 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/
前缀]旗帜
- link `libobjc.dylib - 有效
这是我使用的 shell 命令(我对 libSystem
做了同样的事情,因为它需要相同的处理):
$ cd /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/lib/swift/macosx
$ sudo ln -s /usr/lib/libobjc.dylib
$ sudo ln -s /usr/lib/libSystem.dylib
swift build
命令现在可以正常运行,产品可以正常运行。但是,我不认为这是用户友好的安装过程,Apple。
我一直在关注 http://swift.org 上的 "Getting Started" 教程。创建新的 Swift "Hello World" 项目后,我 运行 shell 命令:
$ swift build
并得到以下输出:
Compiling Swift Module 'MyProject' (1 sources)
Linking MyProject
ld: library not found for -lobjc
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/bin/swift-build-tool -f /Users/petrmanek/Projekty/MyProject/.build/debug.yaml default
我假设 ld: library not found for -lobjc
意味着链接器找不到 Objective-C 标准库,但是我发现这很难相信,因为文件 /usr/lib/libobjc.A.dylib
和 /usr/lib/libobjc.dylib
存在于我的文件系统中。
我现在该怎么办?
我的配置是:
Hardware: Mac mini (Late 2012)
OS: Mac OS 10.11 El Capitan
uname -a
Darwin tywin 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
swift --version
Apple Swift version 3.0-dev (LLVM b361b0fc05, Clang 11493b0f62, Swift fc261045a5)
Target: x86_64-apple-macosx10.9
我想我已经解决了。如果有人感兴趣,这是我的解决方案。
查看 swift-build --help
选项列表,我发现了 -Xlinker
选项,它允许我直接为 ld
指定标志。我用这个选项告诉它更详细的命令:
$ swift build -Xlinker -v
输出是:
Linking MyProject
@(#)PROGRAM:ld PROJECT:ld64-242
configured to support archs: i386 x86_64 x86_64h armv6 armv7 armv7s armv7m armv7k arm64
Library search paths:
/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/lib/swift/macosx
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib
Framework search paths:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/
ld: library not found for -lobjc
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/bin/swift-build-tool -f /Users/petrmanek/Projekty/MyProject/.build/debug.yaml default
这很混乱,但我们可以看到 /usr/lib
不在库搜索路径中。我有两个选择:
- 添加
/usr/lib
作为搜索路径 - 这没有用,因为ld
努力在我使用 [=20= 添加的每个搜索路径前添加/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/
前缀]旗帜 - link `libobjc.dylib - 有效
这是我使用的 shell 命令(我对 libSystem
做了同样的事情,因为它需要相同的处理):
$ cd /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a.xctoolchain/usr/lib/swift/macosx
$ sudo ln -s /usr/lib/libobjc.dylib
$ sudo ln -s /usr/lib/libSystem.dylib
swift build
命令现在可以正常运行,产品可以正常运行。但是,我不认为这是用户友好的安装过程,Apple。