안녕하세요. 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 로 빌드를 하면 에러 없이 빌드 됩니다.
참고되시길~