我找到了例子和帖子
>创建一个用于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