2011년 6월 25일 토요일

iOS에서 sqlite3 관련 Framework 추가하기.

안녕하세요. iOS 관련 개발을 하면서, sqlite3을 사용하고 있는데, Framework을 등록하지 않아서 Linking Error가 발생했습니다.
에러 내용은 아래에 있습니다.


Undefined symbols for architecture i386:
  "_sqlite3_open", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_prepare_v2", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_column_int", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_column_text", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_step", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_errmsg", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_finalize", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
  "_sqlite3_close", referenced from:
      -[MemoPadAppDelegate readMemoFromDatabase] in MemoPadAppDelegate.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status 


위에 나온 것과 같이 sqlite3_open 과 같은 SQLite3관련 함수를 사용하면 Symbol을 찾을 수 없다고 나옵니다.
참 당황스럽더군요. 왼쪽에 보이는  Frameworks에 관련 프레임워크를 넣으면 될 것 같은데, 어떻게 넣는지... Apple의 개발자 사이트를 찾아보니...
먼저 XCode4.0의 왼쪽 Project Navigator에서 제일 위에 있는 프로젝트를 선택합니다.
위 그림처럼 프로젝트 선택하면, 프로젝트에 대한 설정을 변경할 수 있습니다. 거기에 Build Phase부분에서 Link Binary With Libraries 부분에 Sqlite3관련 라이브러리를 등록하면 됩니다.
+로 되어 있는 부분을 선택하면, 아래와 같이 추가할 수 있습니다.
 libsqlite3.0.dylib를 찾으면 됩니다. 아니면, 서치부분에 sqlite3을 입력하면 2개만 나옵니다.
여기서 하나를 선택해서 넣으면 됩니다. (다른 dylib 둘의 차이는 ??? )
 추가를 하고 나면...

라이브러리가 추가 되어 있고, Cmd + b 로 빌드를 하면 에러 없이 빌드 됩니다.

참고되시길~