链接开源Swift项目中的失败

时间:2016-03-07 12:59:08

标签: swift build open-source build-process ld

我一直在关注"入门"关于http://swift.org的教程。在创建新的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和{{ 1}}存在于我的文件系统中。

我现在该怎么办?

我的配置是:

/usr/lib/libobjc.dylib

1 个答案:

答案 0 :(得分:1)

我想我已经解决了。如果有兴趣的话,这就是我的解决方案。

查看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不在库搜索路径中。我有两个选择:

  1. 添加/usr/lib作为搜索路径 - 由于ld努力在我使用{{1}添加的每个搜索路径前添加/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/前缀,因此无法正常工作} flag
  2. 链接`libobjc.dylib - 工作
  3. 以下是我使用的shell命令(我对-L做了同样的事情,因为它需要相同的处理):

    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 命令现在正在运行,产品正常运行。但是,我不相信这是用户友好的安装过程,Apple。