在Xcode 4中构建与Objective-c应用程序一起使用的静态C lib

我找到了例子和帖子

>创建一个用于C应用程序的静态C lib
>创建一个用于Objective C应用程序的静态Objective C lib.

我找不到并且几天以来一直困扰着,是在XCode 4下创建一个用于Objective-C应用程序的静态C库的正确方法.

我只想使用这个非常简单的代码进行测试:

#include <iostream>
#include "myCppLib.h"

using namespace std;

extern "C" void show_the_world() {
    cout << "Hello,world!\n";
}

我使用armv6 / armv7目标,GCC 4.2编译器,将“C标准库类型”链接为“静态”并将“由认隐藏的符号”链接为“C”,如静态C库的Xcode帮助所述.

我的Objective-C应用程序调用了关于std lib的“show_the_world”功能错误,似乎没有被包括或没有正确引用:

Undefined symbols for architecture armv6:
 "std::ios_base::Init::~Init()",referenced from:
  ___tcf_0 in libmyCppLib_dev.a(myCppLib.o)
  "std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> >&,char const*)",referenced from:
      _show_the_world in libmyCppLib_dev.a(myCppLib.o)
  "std::ios_base::Init::Init()",referenced from:
  __static_initialization_and_destruction_0(int,int)in libmyCppLib_dev.a(myCppLib.o)
  "std::cout",referenced from:
  _show_the_world in libmyCppLib_dev.a(myCppLib.o)
ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status

我相信我为正确的架构编译了这个库,所以在另一个设置或者我的代码中肯定有问题.

欢迎任何帮助!

最好的祝福,
吉米

解决方法

Jimmy Koerting在评论中提供了正确的答案:应用程序需要与libstdc .dylib链接以解析标准库符号. 感谢Jimmy Koerting,但还有一件我想添加内容是,如果您在iOS 6.1中使用xcode最新版本,请添加此libstdc .6.dylib

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...