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

kau*_*hik 2 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)
Run Code Online (Sandbox Code Playgroud)

我想列出我所做的一切

ABCD_Initialize是我添加的静态库的头文件中的函数.

  1. 检查几乎所有相关问题.
  2. 添加了所有正确定位的文件.
  3. 在构建阶段链接FAT文件(.a文件)
  4. fat文件中的lipo说它对armv6 armv7和armv7s有效
  5. 仅将Build Active Architecture设置为YES.
  6. 添加了与FAT文件相关的.h文件
  7. 重启Xcode,Mac等:)

关于我的应用程序的一些事情

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

环境规格

Mountain Lion + Xcode 4.6 + iOS SDK 6.1

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

谢谢

J0k3r

Mic*_*ann 5

我的初步答案是:

我会说第5步不正确.

如果您正在构建库,则需要为所有体系结构构建,而不仅仅是"活动体系结构".

将其设置为" NO",看看它是怎么回事.

我的第二个答案:

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

#ifdef __cplusplus
extern "C" {
#endif

ABCD_Initialize(ABCD_data_type*);

#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

这有助于在符号与您的应用链接时对符号进行解组.这是一个相关的问题,对正在发生的事情有一个很好的解释.