在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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...