我知道如何iOS->Framework&Library->Cocoa Touch Static Library
在 xcode 4.6 中构建对象 C 静态库,借助本教程在 iOS 教程中创建静态库非常简单。然而,我不确定的一件事是如何为 io 应用程序构建和使用纯 C++ 静态库。搭建C++静态库,我也是用 iOS->Framework&Library->Cocoa Touch Static Library
guideline,不同的是我在创建静态库项目的时候删除了所有的.h和.m文件,然后把所有的C++静态库头文件和实现文件都放到了项目中. 一个非常简单的例子如下:
你好.h
#include <iostream>
void say_hello();
你好.cpp
#include "hello.h"
void say_hello()
{
std::cout<<"hello"<<std::endl;
}
它似乎有效,我可以hello.a
为 iPhone 6.1 Simulator 构建静态库。下一步是构建一个将调用静态库的应用程序。我为 iPhone 6.1 Simulator 构建了一个简单iOS application->Single View Application
的,然后尝试使用以下代码调用文件中的 hello.a
静态库ViewController.mm
(将 ViewController.m 更改为 ViewController.mm 以便它可以调用 C++ 函数):
say_hello();
但是,我收到了一条警告和两条错误消息:
警告:
ld: warning: ignoring file hello.a, file was built for archive which is not the architecture being linked (i386):
错误一:
hello.a
Undefined symbols for architecture i386:
"say_hello()", referenced from:
-[ViewController viewDidLoad] in ViewController.o
错误2:
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
然后我有几个与这个实验有关的问题:
- 它是创建纯 C++ 静态库的正确方法吗?
我调用 C++ 静态库的方式有问题吗?
在我的示例中,调用静态库时,如何解决链接错误?
非常感谢。