【问题标题】:How do I change an existing Xcode target from dynamic to static?如何将现有的 Xcode 目标从动态更改为静态?
【发布时间】:2010-11-23 20:41:34
【问题描述】:

我正在处理一个生成动态库 (Cocoa API) 的现有项目。

我宁愿生成一个静态库,但如果我改变 [链接|Mach-O 类型] 字段从“动态库”到“静态库”, Clean Project 和 Build Project 都抱怨说 目标具有无效的 MACH_O_TYPE 值“staticlib”。

有没有一种直接的方法可以让构建生成 静态 .a 文件?

谢谢,
埃里克

【问题讨论】:

    标签: xcode xcodebuild


    【解决方案1】:

    使用 TextEdit 打开 YourProjectName.xcodeproj 文件夹中的 project.pbxproj 文件,搜索 productType 并将其值从“com.apple.product-dynamic”到“com.apple.product-static

    【讨论】:

    • 在我的情况下,它是 com.apple.product-type.library.dynamic 要更改为 com.apple.product-type.library.static乙>。也许是不同的xcode版本,我建议创建一个新的静态库项目并从那里复制productType
    • 对于Xcode 9:静态库是com.apple.product-type.library.static,动态库是com.apple.product-type.library.dynamic,框架是com.apple.product-type.framework,通用包是com.apple.product-type.bundle,单元测试包是com.apple.product-type.bundle.unit-test,应用程序是@ 987654326@,命令行工具为com.apple.product-type.tool。还有更多,但这些是迄今为止最常见的
    【解决方案2】:

    我最终创建了一个新的“静态库”项目,然后添加了所有 成员。关闭 xcode 并在 一个文本编辑器让我快速完成新项目。

    【讨论】:

    • 不幸的是,这是正确的解决方案。目前无法将目标从一种目标类型转换为另一种目标类型。
    • @cdespinosa 您可以将库目标从动态更改为静态。看我的回答。
    【解决方案3】:

    在这篇文章的帮助和一些挖掘工作的帮助下,我设法做到了这一点。我必须做的其他更改是将 compiled.mach-o.dylib 更改为 archive.ar 并更改项目文件中的各种引用(包括 cmets 内部,称我为迂腐)从 foo.dyliblibfoo.a

    我还必须在构建之前创建一个新的“方案”,但这可能是因为我更改了项目的名称,我不确定。此外,当您从 .dylib 移动到 .a 时,需要将库引用的任何框架添加到链接到它的应用程序中。

    值得坚持,因为它保留了原始项目的所有细节(例如构建一个 32/64 fat 二进制文件用于发布但不用于调试)。结果。

    【讨论】:

    • 我已经很久没有记录这个了,但是你的努力得到了支持。
    【解决方案4】:

    删除您的构建目标,然后创建一个新目标,选择“库”并确保选择“静态”类型。在此之后,您只需再次添加源和依赖项。

    【讨论】:

      【解决方案5】:

      您必须更改两个设置:

      • 在库下,将 Mach-O 类型设置为静态库
      • 在打包下,将可执行扩展设置为a

      这在 Xcode 13.1 上对我有用。

      【讨论】:

        猜你喜欢
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多