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

时间:2013-03-28 16:52:40

标签: clang undefined-symbol

错误是..

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是我添加的静态库的头文件中的一个函数。

  1. 几乎检查了所有相关问题。
  2. 正确添加了要定位的所有文件。
  3. 在构建阶段链接FAT文件(.a文件)
  4. FAT文件中的
  5. lipo表示它对armv6 armv7和armv7s
  6. 有效
  7. 仅将Build Active Architecture设置为YES。
  8. 添加了与FAT文件相关的.h文件
  9. 重新启动Xcode,Mac等:)
  10. 关于我的应用的一些事情

    1. 创建工作区
    2. 在工作区中添加了一些其他依赖的.xcodeproj文件。
    3. 添加了FAT文件(C ++)并在构建阶段链接
    4. 在其他链接器标志中设置-ObjC标志(加载静态存档库的所有成员)
    5. 环境规格

      Mountain Lion + Xcode 4.6 + iOS SDK 6.1

      如果您需要更多信息,请与我们联系。任何帮助表示赞赏。

      由于

      J0k3r

1 个答案:

答案 0 :(得分:5)

我的初步答案:

我说第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