XCode中的条件链接静态库与环境变量

时间:2013-07-03 08:54:08

标签: ios xcode static-linking

我想将静态库(.a文件)链接到我的代码中,但有一些限制

  • 条件应该是环境变量而不是构建类型(Debug,Release)或体系结构。
  • 如果未使用静态库(未导入,未在代码中使用),则最终二进制文件不应包含对它的任何引用。

代码应如下所示:

#ifdef CRASH_LOGGING
[Crittercism enableWithAppID:@"abc"]
#endif

环境变量的名称应该相似。

我玩OTHER_LINKER_FLAGS = -weak_library,从目标移除.a,将其设置为可选,但我无法让它工作。要么库没有链接,我得到编译错误,要么.a属于最终的可执行文件。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

最后,我通过向xcodebuild命令行添加更多参数来解决此问题。

基本上你需要做的是调整:

  • 标题.h文件的位置
  • .a所在的位置
  • 告诉链接器您要使用库-lCrittercism_v4_0_7
/usr/bin/xcodebuild -configuration Release clean
"LIBRARY_SEARCH_PATHS=\${LIBRARY_SEARCH_PATHS} \${PROJECT_DIR}/Libraries/CrittercismSDK"
"HEADER_SEARCH_PATHS=\${HEADER_SEARCH_PATHS} \${PROJECT_DIR}/Libraries/CrittercismSDK" 
"OTHER_LDFLAGS=-lCrittercism_v4_0_7"

使用这种方法,您根本不需要将库添加到目标或Xcode。如果最后三个参数未添加到命令行,则库根本不属于最终可执行文件。