静态库链接错误。架构 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 的未定义符号