首页 > 代码库 > iOS 编译含C++代码出现ld: symbol(s) not found for architecture i386错误之解决(转载)

iOS 编译含C++代码出现ld: symbol(s) not found for architecture i386错误之解决(转载)

最近项目需要搭建自己的IM服务器,在快速配置好Openfire之后,开始研究使用gloox开发XMPP客户端实现通信,

先下载gloox源码,然后./configure,make ,sudo make install,在/usr/local/下找到头文件夹和静态库,加到项目中,然后加入openssl库,编写测试代码,编译,报错:XXX not being for architecture i386,感觉是gloox静态库有问题(排除了网上说的头文件路径缺失、building phases没添加、target前没打勾等问题),参照文章http://www.cocoachina.com/bbs/simple/?t27108.html,定位到刚才编译出的库文件,使用lipo -info XXX.a 命令,结果是X86_64,果然默认编译的结果是用于Mac PC端程序用的!而我需要的是ios下运行(真机运行需要armv7架构下的库,模拟器运行需要i386架构下的库),于是尝试编译我所需要的库,奈何网上没有找到gloox编译ios库的方法,源代码文件夹里也没有提到,本想照着当初openssl编译的教程http://www.oschina.net/question/54100_36169试一遍,又觉得gloox不像openssl是纯C源码,可能不能照样画葫芦,时间紧迫决定直接拿源码使用,将源码文件夹里src下的头文件和cpp文件全部加入项目中,编译,报错:ld: symbol(s) not found for architecture i386,排除了以前混编ObjC和C++代码时容易忘记的把m后缀改为mm后缀之类的问题,错误依然存在,网上海找之后居然发现了一个ios下使用gloox的项目代码,果断check out得到代码B,B编译没有错误,之后对比两份代码里gloox部分的源码,是一致的,包括编译的各项选项,换关键词“xcode编译C++代码”海搜之后,有一种说法是需要将编译选项里C++ Standard Library 由默认改为libstdc++,于是改了一下(我只改了TARGETS下的Building Settings),编译成功!程序也跑通,虽然代码B的设置都是默认的,但是B编译却没有错误,这是不解的地方,我想在编译通过之后,应该可以在这个项目下制作i386和armv7架构的静态库了,至于如何用网上下载的gloox源代码包直接制作ios下静态库,有时间参考http://www.360doc.com/content/12/0813/13/8841214_229927425.shtml实践一下!

 

转自:http://blog.csdn.net/dingyaolxl12060621/article/details/9233745