如何构建C ++编写的库并在iOS中使用

时间:2013-10-23 02:16:53

标签: c++ ios objective-c static-libraries

我现在必须将C ++代码移植到iOS,尝试通过原始C ++代码构建静态库并在iOS上加载库。因为原始代码很重,所以我开始一个小测试来验证我的步骤是否可行。

首先我需要构建库(.a),它会打印一些字符串。我编译以下代码并生成一个库(.a)文件

//talk.h
...
#include <iostream>
class Talk {
    Talk();
    void printHello();
    void printWord(char*);
};


//talk.cpp
#include "talk.h"
using namespace std;
void Talk::printHello() {
    cout << "Hello World";
}
void Talk::printWord(char* word) {
    cout << "Hello" << word;
}

我尝试的第二步是为iOS应用程序打开一个新项目,然后设置指向库文件的链接,还包括相应的“talk.h”头文件。 但是,即使我成功构建库,头文件也会发生一些错误。

错误表明

    找不到
  1. “iostream”文件
  2. “未知类型名称'类';您的意思是'班级'吗?
  3. 任何其他错误......
  4. 我尝试将controller.m重命名为controller.mm,但它没有解决问题

    如何导入用C ++编写的头文件以便在iOS上使用库? 感谢

3 个答案:

答案 0 :(得分:4)

粗略概述:

在Xcode中(从任一模板iOS应用程序项目(或现有模板)开始:

  • 创建新的静态库目标文件 - &gt;新 - &gt;目标.... 选择框架或库,然后选择 Cocoa Touch静态库
  • 添加库源代码:将库源代码拖放到Xcode项目中。在出现的对话框中,选择上面创建的构建目标。
  • 向库中添加项目依赖性:在项目导航中选择项目,从目标中选择iOS构建目标。选择构建阶段标签,然后在窗口中的目标依赖下,点击 + 标志。打开工作表(选择要添加的项目),库目标应位于列表顶部。
  • 在iOS目标中包含库:在链接二进制文件库下,单击+。库(.a文件)应位于列表的顶部。
  • 与libc ++的链接:如上所述。从列表中选择 libc ++
  • 为任何需要包含库标题的源代码文件启用Objective-C ++编译,方法是将扩展名从.m更改为.mm
  • 构建iOS应用程序目标。

Xcode将负责为您设置其他所有内容,包括编译器标志和标头搜索路径。

答案 1 :(得分:0)

对于第一部分,C ++与Xcode编译得很好 我写了一个简单的教程 http://tutorialsios.blogspot.com/2013/09/c-beginers-code-for-objective-c.html 这些代码是使用Xcode编写的,并在终端

中编译
#include "functionOverLoading.h"
int main(int argc, const char * argv[]) {
..
..
       return 0;
    }
  

$ g ++ functionOverLoading.cpp -o functionOverLoading

     

$ ./functionOverLoading

答案 2 :(得分:0)

您需要添加C ++标准库。

要执行此操作,请在项目中找到其他链接标记并添加-lstdc++