在启用arc的项目iOS中添加非弧库

时间:2013-09-20 06:17:03

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

我在实施声音处理库时最近遇到了一些问题:

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

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

感谢。

enter image description here

enter image description here

修改

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

4 个答案:

答案 0 :(得分:3)

我只是在此基本步骤,按照与您已经完成的步骤进行比较。

  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.

答案 1 :(得分:3)

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

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

enter image description here

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

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

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

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


修改

我看到你的项目中有两个库,它们都用以下命令组合创建一个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标记为如下图像

enter image description here

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

希望有所帮助!

答案 2 :(得分:1)

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

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

enter image description here

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

答案 3 :(得分:0)

我认为这个错误不是弧 - 非弧问题。这是框架工作/ lib链接错误

检查您是否已整合所有框架作品