在 iPhone SDK 3.0 中链接静态库

Posted

技术标签:

【中文标题】在 iPhone SDK 3.0 中链接静态库【英文标题】:Linking Static Libraries in iPhone SDK 3.0 【发布时间】:2009-07-07 22:11:17 【问题描述】:

我有一个严重依赖 OpenCV 库的 iPhone 应用程序;因此,我编译了该库的静态版本以包含在我的应用程序中。执行此操作的说明相对简单:Using OpenCV on iPhone。我遇到的唯一问题是将链接器标志 STANDARD_C_PLUS_PLUS_LIBRARY_TYPE 设置为“standard”。该应用程序在 OS 2.0 和 2.2 下编译并完美运行。

升级到 SDK 3.0 并尝试重新编译我的应用程序后,我遇到了这个链接器标志的问题。链接时出现此错误:

ld:找不到 -lstdc++-static 的库

有趣的是,在我的系统上,除了 iPhoneOS.platform/SDKs/iPhoneOS3.0.sk 之外,似乎每个 iPhoneOS 和 iPhoneSimulator SDK 下都存在“libstdc++-static”。以下是搜索结果:

$ locate libstdc++-static
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.1.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.0.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.1.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.sdk/usr/lib/libstdc++-static.a
/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/usr/lib/libstdc++-static.a
/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libstdc++-static.a
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libstdc++-static.a
/usr/lib/libstdc++-static.a

我很困惑,无法在 Google 或 iPhone 开发者论坛上找到任何答案。如果有人能在这里阐明一下,我将不胜感激。

谢谢!

【问题讨论】:

OS 3.x 中的 libstdc++ 是什么版本? 【参考方案1】:

只是猜测 - 尝试将其中一个目录添加到构建属性中的“库搜索路径”选项?

【讨论】:

这成功了!谢谢!我试图从较旧的 SDK 复制文件,但这不起作用(尽管我不确定是否需要执行与 ldconfig 等效的操作来重新扫描该目录,所以我打算重新启动) 太棒了!我首先开始考虑 LD_LIBRARY_PATH,然后认为它可能在属性中。【参考方案2】:

这真是令人费解,我唯一能想到的就是/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk 不在您的图书馆搜索路径中,但这不太可能。

【讨论】:

我试图编译 iPhoneOS,而不是模拟器。它需要对两者都有效。 你说得对,那只是从我身边溜走,那么iphone的图书馆在哪里?它没有出现在您的列表中...... 对,这就是问题所在;) 似乎 Apple 在 SDK 3.0 中忽略了它——可能只是一个错误。事实证明,2.2 版本的库在 3.0 中运行良好。

以上是关于在 iPhone SDK 3.0 中链接静态库的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 C++ 项目中链接本地安装的 SDK 的静态库?

静态 (iPhone) 库、分发和依赖项

Xcode for iPhone 中静态库和动态库的区别

从 iPhone/CocoaTouch 库中链接库的正确方法

Facebook iOS SDK - 如何为 Xcode 4.3 构建静态库?

如何链接(或解决)两个定义相同符号的第三方静态库?