6

我现在必须将 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. 任何其他错误...

我尝试将controller.m 重命名为controller.mm,但这并不能解决问题

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

4

3 回答 3

4

粗略的大纲:

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

  • 创建一个新的静态库目标File -> New -> Target....选择Framework 或 Library,然后选择Cocoa Touch Static Library
  • 添加库源代码:将库源代码拖到 Xcode 项目中。在出现的对话框中,选择上面创建的构建目标。
  • 将项目依赖添加到库:在项目导航中选择项目,这是来自 Targets 的 iOS 构建目标。选择Build Phases选项卡,然后在窗口中的Target Dependancies下,单击+号。一个工作表打开(选择要添加的项目),库目标应该在列表的顶部。
  • 在 iOS 目标中包含库:在Link Binary with Libraries下,单击 +。库(一个 .a 文件)应该位于列表的顶部。
  • 与 libc++ 链接:如上述步骤。从列表中选择libc++ 。
  • 通过将扩展名从 .m 更改为 .mm,为任何需要包含库头文件的源代码文件启用 Objective-C++ 编译
  • 构建 iOS 应用程序目标。

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

于 2015-03-20T22:09:04.807 回答
0

You need to add the C++ Standard Library.

To do this, find Other Linker Flags in your project and add -lstdc++.

于 2013-10-23T02:59:24.360 回答
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

于 2013-10-23T02:42:28.330 回答