XcodeでStatic Link Libraryをリンクする場合にエラーが発生する。

Xcode8.3でStatic Link Library を作成して、別のプロジェクトから利用使用とリンクすると、実装したはずのシンボルが見つからずエラーとなった。

  • xcode link error
 Undefined symbols for architecture arm64:
  "_funcTest", referenced from:
      __TFC13test_ios_app13test10releaseObjfT_T_ in testlib.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use
 -v to see invocation)

なかなか原因がわからず苦労する。

そういう時は初心に戻ってライブラリの中に目的のシンボルがあるか確かめて見ると良い。

  • nmコマンド
#シンボル一覧表示
nm -g testlib.a  

# grep で目的の関数を探す。
nm -g testlib.a | grep funcTest

なんと今回は実装したはずの関数がライブラリに含まれていなかった。
今回はcppで実装した関数をextern "C" したのだが、プロトタイプ宣言したヘッダをcppにincludeしておらず、コンパイル時にエクスポートされなかったようだ。