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

How to build library written by C++ and use in iOS

本文关键字:iOS 何构建 构建 C++      更新时间:2023-10-16

我现在必须将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上使用库?谢谢

粗略的大纲:

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

  • 创建一个新的静态库目标:文件 -> 新建 -> 目标...。选择"框架"或"库",然后选择"Cocoa Touch 静态库"
  • 添加资源库源代码
  • :将资源库源代码拖到 Xcode 项目中。 在出现的对话框中,选择上面创建的生成目标。
  • 将项目依赖项添加到库:在"项目导航"中选择"项目",即"目标"中的 iOS 生成目标。选择"生成阶段"选项卡,然后在窗口中的"目标依赖项"下,单击 + 号。将打开一个工作表(选择要添加的项目),库目标应位于列表顶部。
  • 在 iOS 目标中包含库:在"将二进制文件与库链接"下,单击 +。库(.a 文件)应位于列表顶部。
  • 与libc ++链接:如上述步骤。从列表中选择 libc++
  • 通过将扩展名从 .m 更改为 .mm 来为需要包含库标头的任何源代码文件启用 Objective-C++ 编译
  • 生成 iOS 应用程序目标。

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

对于第一部分,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++ 函数重载

.cpp –o 函数重载

$ ./函数重载

您需要

添加C++标准库。

为此,请在项目中查找"其他链接器标志"并添加-lstdc++