微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐