【问题标题】:Add non arc library in arc enabled project iOS在启用弧的项目iOS中添加非弧库
【发布时间】:2013-09-20 06:17:03
【问题描述】:

我最近在从以下位置实现声音处理库时遇到了一些问题:

http://www.izotope.com/tech/izomobile/djfx.asp

我认为问题在于我的实现是启用了 ARC 并且库是非 arc C++ 实现。我尝试使用该库为文件添加 -fno-objc-arc,还尝试将 viewcontrollers 扩展名更改为 .mm 而不是 .m。请查看随附的图片,如果其他人遇到此问题,请告诉我。

谢谢。

编辑

您可以从以下地址下载示例项目链接:https://www.dropbox.com/s/ljvnevkwkyplp2k/SoundEffects_ARC.zip

【问题讨论】:

    标签: iphone ios objective-c automatic-ref-counting static-libraries


    【解决方案1】:

    看起来您的代码需要与 C++ 标准库链接。在您的项目中更改这些目标构建设置并检查它是否有效,

    Apple LLVM compiler language-> C++ language dialect-> Compiler default
    Apple LLVM compiler language-> C++ standard library-> Compiler default
    

    此外,顶部的警告表明您的库 libFunFX.a 不是为 i386 构建的,即 iPhone 模拟器。确保您可以尝试以下方法。

    打开终端,转到包含库的文件夹并使用此命令

    lipo -info libFunFX.a ↵
    //Output: 
    Architectures in the fat file: libFunFX.a are: armv7 i386 
    

    如果它列出了 i386,则不用担心,否则您需要与所有者沟通,向您发送包含设备 (armv7/armv7s) 和模拟器 (i386) 切片的 FAT 文件。


    编辑

    我看到您的项目中有两个库,将两者结合起来使用以下命令创建一个 FAT 文件。

    lipo -create libFunFX.a libFunFXSim.a -output libFunFX_Univ.a
    

    所以现在如果你检查一下,

    lipo -info libFunFX_Univ.a 
    //Output 
    Architectures in the fat file: libFunFX_Univ.a are: armv7 (cputype (12) cpusubtype (11)) i386
    

    项目文件的变化

    • AppDelegate.m 更改为AppDelegate.mm
    • 将 ViewController.m 更改为 ViewController.mm
    • 添加并链接上面创建的 libFunFX_Univ.a 文件,而不是两个单独的 .a 文件。
    • 将文件-fno-objc-arc标记为下图

    进行这些更改后,我能够成功地为模拟器构建您的项目。我不确定你是否真的想使用 ARC,因为很多文件都被标记为手动内存管理。在这种情况下,对整个项目进行手动内存管理会更容易。只是一个建议!

    希望有帮助!

    【讨论】:

    • 感谢您的回答。这是我在终端中得到的:> 我没有得到它。有点新蜜蜂
    • @AwaisTariq 好的,(cputype (12) cpusubtype (11)) 是 armv7s。所以你的库不包含 i386 的切片。所以你需要让 lib 的所有者也发送包含 i386 的 FAT 文件。同时,您可以尝试为设备构建此代码。
    • 谢谢让我试试^_^
    • 我提供了示例项目。看看你能不能帮我解决这个问题?
    • @AwaisTariq 我只需进行少量更改即可成功构建模拟器项目。我会将它们添加到我编辑的答案中。
    【解决方案2】:

    我只是把基本步骤放在这里,按照它与你已经完成的步骤比较。

      Select Project Form Project Manager
          |
          | 
          Targets
               |
               |
             Build Phases
                  |
                  |
                Compile Sources
                        |
                        |
                    Select File that you Want to crate as ARC. (You can also Select Multiple File name from here)
                                |
                                |
                            Press "ENTER" key
                                   |
                                   |
                              Popup Box/Window is displayed 
                                       |
                                       |
                                    Write here - '-fno-objc-arc'
                                            |
                                            |
                                        And again Press 'ENTER' key.
    
    
    Your selected file is being ARC.
    

    【讨论】:

    • 项目已启用 ARC 我想添加非 arc 库。我也试过这个过程。 :S
    • 与其使用-fno-objc-arc,不如简单地取消选中自动引用计数设置?
    【解决方案3】:

    那些链接器错误与ARC无关,只是没有配置C++运行时库。

    现在你有两个选择;旧的libstdc++ 或新的libc++,我无法从错误消息中看出您应该使用哪些,因此您必须进行试验:

    此外,.../SoundsEffects_ARC.a 似乎还没有为 iPhone 模拟器编译(缺少架构 i386 是这里的线索)。如果您有源代码,最简单的解决方法是创建一个 Xcode 工作区并将该项目包含在工作区和配置的依赖项中,然后 Xcode 将在需要时为 iPhone 模拟器构建它。如果您没有源代码,那么您很不走运,需要一个包含 i386 架构代码的胖版本存档。

    【讨论】:

    • 我提供了示例项目。看看你能不能帮我解决这个问题?
    【解决方案4】:

    我认为这个错误不是弧非弧问题。这是框架/库链接错误

    检查您是否已集成所有框架作品

    【讨论】:

    • 我有,因为我做了一个类似的示例项目,但没有使用 ARC。效果很好。
    • 检查第三方库仅适用于非弧,因为,可能是仅使用弧模式的库内部文件,我认为 t
    • 我认为第三方为该检查提供了非 arc lib 一次
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多