【问题标题】:Can Xcode build against older versions of frameworks, statically?Xcode 可以静态地针对旧版本的框架构建吗?
【发布时间】:2009-10-08 13:15:06
【问题描述】:

CoreAudio 在 OS X 和 iPhone OS 3.x 中无法打开某些 MP3 文件。这是我提交给 Apple 的一个错误,已在 10.6.2 中修复。不幸的是,我仍然必须支持 iPhone OS 3.x,所以我需要测试这些搞砸 CoreAudio 的文件。我使用一个简单的命令行工具检查它们,该工具尝试 AudioFileOpenURL 并在打开它时返回 > 0。如果有我使用 Apple 的 iTunes 编码器来编码 MP3 而不是蹩脚的。

我目前无法升级到 10.6.2,因为我的 MP3 文件检查器现在将传递无法在 iPhone OS 3.x 上打开的文件。

有没有办法针对旧版本的 AudioToolbox/CoreAudio 或其他一些检查解决方案构建检查工具?

【问题讨论】:

    标签: iphone xcode core-audio


    【解决方案1】:

    如果我理解正确,您希望链接来自过时系统框架的代码。

    静态链接意味着您必须将 dylib 拆开并从中创建一个静态库,这至少很难说。

    但是您可以将受影响的系统框架从旧的(有缺陷的)系统复制到您的应用程序包装器或靠近可执行文件的其他位置。然后将可执行文件链接到这些框架。

    您可以使用终端查看您正在链接的库:

    $ cd foo-project/build/Debug
    $ otool -L foo
    foo:
        /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
    

    将 mach-o 可执行文件中的加载命令更改为使用链接框架的另一个路径非常容易:

    $ install_name_tool -change /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio @executable_path/CoreAudio.framework/Versions/A/CoreAudio foo
    $ otool -L foo
    foo:
        @executable_path/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
    
    $ DYLD_PRINT_LIBRARIES=1 ./foo
    dyld: loaded: /Users/nikolai/foo-project/build/Debug/./foo
    dyld: loaded: /Users/nikolai/foo-project/build/Debug/./CoreAudio.framework/Versions/A/CoreAudio
    ...
    

    您可以准备(复制的)框架,以便在构建 foo 可执行文件时,它会自动具有正确的加载命令:

    $ install_name_tool -id @executable_path/CoreAudio.framework/Versions/A/CoreAudio CoreAudio.framework/Versions/Current/CoreAudio
    

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 2015-12-26
      • 1970-01-01
      • 2015-06-23
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2019-11-05
      相关资源
      最近更新 更多