iOS下编译leveldb的总结

之前看到@糖炒小虾_txx 关于如何将leveldb编译到iOS中的文章。自己也试了试,不过还是碰到很多麻烦。

Xcode在build settings里面可以设置使用哪个C++标准库。有两个可以选择,libc++和libstdc++。其中libc++写着是with c++11 support。不过选了libc++之后,deployment target为4.3,就会编译错误,提示libc++只能用于iOS 5.0之后的工程。

所以如果有公司还需要支持iOS4.3的,就必须使用libstdc++。一旦选择了标准库,就需要在任何编译设置里统一它,包括.a文件的编译。

所以我的编译过程如下:

首先,进入leveldb,修改它的makefile,是它支持armv7s和arm64架构:

找到 ifeq ($(PLATFORM), IOS),将下面.cc.o和.c.o中的 -arch armv6去掉,增加 -arch armv7s和 -arch armv64。保留原有的-arch armv7。

然后编译,编译命令改为 CXXFLAGS=-stdlib=libstdc++ make PLATFORM=IOS

编译完成之后,将.a拖到工程里,将leveldb中的include中的头文件拖到工程里。

然后进行Xcode工程设置,在build settings中,将C++ Standard Library改为libstdc++,并且在build phases里面增加连接libstdc++.dylib。这样就行了。

另外,老谭的文章里的demo,里面的AppDelegate不需要把.m改成.mm,只要link了libstdc++.dylib。

No Comments

Post a Comment