静态库链接错误。架构 armv7s 的未定义符号

Posted

技术标签:

【中文标题】静态库链接错误。架构 armv7s 的未定义符号【英文标题】:Static Library linking error. Undefined symbols for architecture armv7s 【发布时间】:2013-03-28 16:52:40 【问题描述】:

错误是..

Undefined symbols for architecture armv7s:
   "ABCD_Initialize(ABCD_data_type*)", referenced from:
       -[MyViewController doSomething] in MyViewController.o
   ld: symbol(s) not found for architecture armv7s
   clang: error: linker command failed with exit code 1 (use -v to see invocation)

我想列出我所做的一切

ABCD_Initialize 是我添加的静态库头文件中的一个函数。

    检查了几乎所有相关问题。 已正确添加所有目标文件。 在构建阶段链接了 FAT 文件(.a 文件) FAT 文件上的 lipo 表示它对 armv6 armv7 和 armv7s 有效 将“仅构建活动架构”设置为“是”。 添加了与 FAT 文件相关的 .h 文件 重新启动 Xcode、Mac 等 :)

关于我的应用的一些事情

    创建了一个工作区 向工作区添加了一些其他相关的 .xcodeproj 文件。 添加了 FAT 文件(C++ 的)并在构建阶段链接 在其他链接器标志中设置 -ObjC 标志(以加载静态存档库的所有成员)

环境规格

Mountain Lion + Xcode 4.6 + ios SDK 6.1

如果您需要更多信息,请告诉我。任何帮助表示赞赏。

谢谢

J0k3r

【问题讨论】:

有人有什么想法吗? 【参考方案1】:

我的初步回答:

我会说第 5 步不正确。

如果您正在构建一个库,您希望为所有架构构建,而不仅仅是“活动架构”。

将其设置为“NO”,看看效果如何。

我的第二个答案:

另外,请确保您在库函数声明中添加了“extern "C"

#ifdef __cplusplus
extern "C" 
#endif

ABCD_Initialize(ABCD_data_type*);

#ifdef __cplusplus

#endif

当符号链接到您的应用程序时,这有助于解构符号。 Here's a related question with a decent explanation of what's going on.

【讨论】:

非常感谢......你结束了 3 天的斗争。

以上是关于静态库链接错误。架构 armv7s 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章

归档时应用程序获取“架构 armv7 的未定义符号”,除非我不剥离库中的链接产品

FBSDKLoginCore 架构 armv7 的未定义符号

架构 armv7 的未定义符号 - route-me 库,仅限临时

架构 armv7 的未定义符号:用于外部 C 库

架构armv7的未定义符号?这个错误是啥意思?

Apple Mach-O Linker Errors (20) - 架构 armv7 的未定义符号