【问题标题】:How to force Garbage Collection?如何强制垃圾收集?
【发布时间】:2015-02-12 09:38:24
【问题描述】:

还有什么方法可以用垃圾收集构建一个 Objective-C 应用程序吗?

我正在编写一个库来增强 Mac 应用程序(因此我使用 DYLD_INSERT_LIBRARIES='/path/to/dylib' /Applications/Original.app/Content/MacOS/Original 运行该应用程序)。
但是,当我运行它时,我首先遇到了问题,因为我的库使用了 ARC,这与原始应用程序不同。现在我已禁用 ARC,但在原始应用程序崩溃之前出现此运行时错误:

objc[610]: '/Users/me/mylib/myLib.dylib' was not compiled with -fobjc-gc or -fobjc-gc-only, but the application requires GC    
objc[610]: *** GC capability of application and some libraries did not match    

不过,Apple 现在似乎已经取消了对普通旧 GC 的支持,转而支持 ARC。
我曾尝试使用 XCode 中的 GCC_ENABLE_OBJC_GC 或 gcc(或 clang)的 -fobjc-gc 参数,但我收到此编译器错误:garbage collection is no longer supported
看起来我被困住了......有没有办法用GC强制构建我的库?我想我可能会使用仍然支持 GC 的旧版本 LLVM/gcc,但是有没有更简单的方法?
注意:我使用的是 XCode 6.1 和 Yosemite,原始应用程序(因此我的库)是 32 位的。

非常感谢

【问题讨论】:

    标签: xcode macos build garbage-collection dylib


    【解决方案1】:

    here所述:-

    Xcode 5.1 不再支持构建使用垃圾收集的 OS X 应用程序;尝试构建此类目标会导致构建错误。

    【讨论】:

    • 是的,我也是这么理解的。那么问题来了,有没有办法绕过这个限制?我将无法使用 XCode 或官方 LLVM 编译器构建我的库,但也许一些技巧(显然是 XCode 之外的)可以让我构建它?
    • 据我所知,最简单的方法是使用旧版本的 XCode。由于较新的编译器不再支持它,我怀疑您是否能够使用它们。
    • 好吧,那我就试试。我本来想避免它,但看起来这是唯一的方法......幸运的是,我保留了一个带有 Snow Leopard 的旧 HDD(带有旧版本的 XCode 和编译器),我会从它的抽屉里只是收集灰尘:)
    • 好的,只是为了给这个问题一个反馈,我终于找到了我想添加我的lib的软件的ARC版本。所以这种解决了我原来的问题。但是作为记录,最后,我想我们可以说我被卡住了,因为只使用旧版本的编译器会有所帮助......无论如何感谢您的帮助!
    猜你喜欢
    • 2011-05-14
    • 2011-04-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2019-06-07
    • 2012-12-06
    相关资源
    最近更新 更多