【发布时间】:2013-09-15 09:59:10
【问题描述】:
我知道如何在 xcode 4.6 中使用 iOS->Framework&Library->Cocoa Touch Static Library 构建对象 C 静态库,在本教程 Creating a Static Library in iOS Tutorial 的帮助下,这很简单。然而,我不确定的一件事是如何为 io 应用程序构建和使用纯 C++ 静态库。搭建C++静态库,我也是用iOS->Framework&Library->Cocoa Touch Static Library的方针,不同的是我在创建静态库项目的时候把.h和.m文件都删了,然后把C++静态库头文件和实现文件都放到了在项目中。一个非常简单的例子如下:
你好.h
#include <iostream>
void say_hello();
你好.cpp
#include "hello.h"
void say_hello()
{
std::cout<<"hello"<<std::endl;
}
它似乎有效,我可以为 iPhone 6.1 模拟器构建 hello.a 静态库。下一步是构建一个将调用静态库的应用程序。我为 iPhone 6.1 Simulator 构建了一个简单的iOS application->Single View Application,然后尝试使用以下代码调用ViewController.mm 文件中的hello.a 静态库(将 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):
错误 1:
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++ 静态的方式有问题吗 图书馆?
在我的示例中,调用静态库时,如何解决链接错误?
非常感谢。
【问题讨论】:
-
我认为您使用正确的技术来构建静态库。你能确认一下你的静态库的 Build Settings->Architecture 吗?
标签: c++ ios objective-c xcode static-libraries