4

首先,请原谅并指出我是否要使用其他协议来引用另一个线程/帖子。

之前有一个线程如何为 iOS 编译 spatialite,其中最佳答案部分描述了将 spatialite 构建为 iOS 的静态库。答案包括以下文字:

“一旦你拖放了.a(两者都需要在模拟器和真实硬件上工作),你可以通过调用来初始化空间spatialite_init(1)。”

我猜这被翻译成以下的某些版本?

Xcode 4

  1. File->New->New Target->iOS->Framework & Library->Cocoa Touch静态库

  2. 命名库 - libSpatialite_TedS

  3. 将头文件拖到 libSpatialite_TedS -> Copy Headers (这里的问题......在'spatialite2.3.1.zip'下载的'headers'目录中有一个spatialite.h文件。然后在'spatialite'子目录中还有另一个spatialite.h,它不是一个相同的文件,显然是需要的。我们是否只需将头文件从“headers”目录中拖动,然后将目录“spatialite”作为目录拖到我们的 Xcode 静态库“myNewLibrary”的“Copy Headers”区域中'?)

  4. 拖动“.a 文件”libSPATIALITE2.3.1_arm.a & libSPATIALITE2.3.1_x86.a

  5. 我们不应该在“编译源”字段中有一些“.m”文件与这些标题一起使用吗?

现在,没有libSpatialite_TedS在我的项目中引用,当我“Command-B”构建时,项目构建成功。但是,当我在

/Users/Admin/Library/Developer/Xcode/DerivedData/MyProject-gutnkbwqqonzgxbcmfzzzkadqhid/Build/Products/Release-iphonesimulator

我看到了 build 的产品,但它们不包括 libSpatialite_TedS。

这是因为编译器是“智能的”并且识别出项目中没有引用任何 header/.a 文件,因此它不会费心编译它们吗?

而且,这是实现原始海报如何为 iOS 编译空间站目标的正确方法吗?

非常感谢,泰德 S

4

2 回答 2

3

我也遇到了原始海报的链接器错误,但通过在目标中包含 libsqlite3.dylib、libstc++.dylib 和 libiconv.dylib 解决了它。

希望这可以帮助!

于 2012-01-16T19:30:17.647 回答
2

泰德,我相信 .a (静态库)文件和头文件应该立即在项目中使用,而不是像您描述的那样在另一个静态库中使用。它们是项目输出的结果。我想你可以在这里找到构建它们的项目:

http://lionel.gueganton.free.fr/spatialite/

还有更多关于静态库文件的信息:

什么是 .a(如 libcrypto.a)文件?

已编辑

这是您可能会发现有用的另一个链接。它是 iOS 中静态库构建过程的总结:http: //www.icodeblog.com/2011/04/07/creating-static-libraries-for-ios/

于 2012-11-15T23:21:11.747 回答