Xcode 6.1.1 的静态库和 cocoapods - ld: library not found 错误

Posted

技术标签:

【中文标题】Xcode 6.1.1 的静态库和 cocoapods - ld: library not found 错误【英文标题】:Static library and cocoapods with Xcode 6.1.1 - ld: library not found Error 【发布时间】:2015-03-07 22:36:59 【问题描述】:

不确定它是否与 Xcode 6.1.1 或 Cocoapods 0.35.0 有关。

我已经使用 Xcode 6.1.1 生成了新的静态 ios 库。

成功(没有 cocoapods)

    生成模拟器和设备库 Lipo 并生成 FAT MyLib.a 静态最终库 创建新的 View Application 项目。 (我没有更改任何默认设置。例如 Base SDK、Valid Architecture。) 手动将 MyLib.a 和必要的头文件添加到应用程序项目中。 构建应用程序项目并且它工作正常!没有错误没有警告。

错误

    将相同的 MyLib.a 和标头(上面生成)上传到 HTTP 直接下载服务器(一种工件服务器)。 生成规范和 podfile。 从我之前手动完成的应用程序项目中删除所有依赖项(lib 和标头)。 添加 pod 文件和本地规范 “Pod install”命令在 /Pods 文件夹中正确拉出 MyLib.a 和标题。

但是在构建应用程序项目时给了我

   Ld Build/Products/Debug-iphonesimulator/LibTest.app/LibTest normal x86_64
    cd /Users/admin/Cocoapods/Project/Library/TestProject/LibTest
    export IPHONEOS_DEPLOYMENT_TARGET=8.1

 ld: library not found for -lMyLib
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

当我在 MyLib.a 上触发“lipo”命令时

fat文件中的架构:/Users/admin/Cocoapods/Project/Library/Libs/Final/MyLib.a是:armv7 armv7s i386 x86_64 arm64

这不是真正的架构问题,否则它应该在我没有 cocoapods 的第一次尝试中失败。 Cocoapods 做了一些构建配置更改,这会产生这个问题。

帮我解决这个问题。

【问题讨论】:

【参考方案1】:

花了 2 天时间找出确切的问题后,我发现修复非常愚蠢。它基本上是静态库命名约定问题。 如果您在工件/媒体 http 服务器中有静态库并希望与 Cococapods 集成,请确保库名称应为 lib(your name).a 以及标头。

在我的情况下,我保留了 MyLib,它目前在“pod install”时被下载,但在应用程序构建期间它失败了。 重命名为 libMyLib.a 后,一切都对我有用。 :)

很容易应用但很难找到这样的解决方案]

不确定 cocoapods 是否在任何指南中记录了这一点。

【讨论】:

+1 是的,这是ld默认查找库文件的方式,它应该以lib为前缀,文件为libMyLib.a,而实际的ld链接器标志为-lMylib

以上是关于Xcode 6.1.1 的静态库和 cocoapods - ld: library not found 错误的主要内容,如果未能解决你的问题,请参考以下文章

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

Xcode生成静态库和bundle

静态库和 Swift

Xcode7 制作通用的framework,静态库和动态库

iOS XCode7制作.Framework动态库和.a静态库的总结

胖静态库和框架节省?