Objective C

편집하기

이 페이지는 Linux 환경에서 Objective-C를 공부하고자 할 때 발생했던 문제들을 정리한 것이다.

개발 환경

Ubuntu 9.10

일반적으로 개발 환경이 갖추어져 있다고 했을 때,

1. sudo apt-get gobjc libobjc2

(아마도 gobjc만 인스톨하면 libobjc2는 의존성으로 따라올 듯)

으로 충분하다. 개발 환경을 아직 갖추지 - gcc가 설치되어 있지 - 않은 사람은

1. sudo apt-get build-essential

로 환경을 갖출 수 있다.

구글링하면 GNUstep을 설치해야 objective-c를 컴파일 할 수 있다고 설명하는 문서가 많은데, 다들 예전에 작성된 문서라서 그렇다. gcc objective-c를 공식적으로 지원하고 있으니 순수하게 objective-c 언어만을 공부할 것이라면 GNUstep이 꼭 필요하지 않다.

1. j0nguk@dviis-jonguk-ubuntu:~/workspace$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.1-4ubuntu8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug--enable-objc-gc--enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8)
j0nguk@dviis-jonguk-ubuntu:~/workspace$

현재 컴퓨터에는 gcc 4.4.1이 설치되어 있으며 objc가 지원 가능하고 gc가 역시 가능하도록 컴파일 되었다는 것을 알 수 있다.

NSObject?

많은 objective-c예제들이 NSObject를 상속하고 있다. NSObject를 사용하기 위해서는 GNUStep을 설치해야 하는데, 사실 꼭 그럴 필요가 없다. 같은 역할을 하는 객체를 GNU Objective-c가 이미 가지고 있기 때문이다.

NSObject를 사용하는 예제들은

1. #import <Foundation/NSObject.h>

로 시작하여 NSObject를 이용하라고 하지만, GNUstep을 설치하지 않았으므로,

1. #import <objc/Object.h>

를 하여 Object를 사용할 수 있다. , 예제에서 NSObject라고 되어 있는 것을 Object로 바꾸면 된다.

How to Compile

간단하게 command line에서 컴파일을 하기 위해서는

cc 소스코드() -lobjc_gc -ldl

1. ex) cc -Wall main.m MyObject.m -lobjc_gc -ldl

를 이용할 수 있다. -lobjc_gc objc(objective c) library를 이용하라는 의미인데, _gc gabage collection 기능을 사용한다는 의미이다. 사용을 원하지 않을 때는 -lobjc로 충분하다. -lobjc_gc를 이용할 때

1. libobjc_gc.so: undefined reference to `dlopen' collect2: ld returned 1 exit status

과 같은 에러가 발생한다면 예제와 같이 -ldl를 뒤에 함께 붙여주면 된다.

objc_gc를 붙이는 것에 대한 자세한 설명은http://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_7.html#SEC131에 있다.

C와의 호환성

openssl 라이브러리를 이용해서 간단한 프로그램을 작성할 때 objc로 컴파일을 해봤다. 아무런 문제가 없다. c++보다는 오히려 c와의 연계가 더 좋을 듯하다.

[출처] http://john6.springnote.com/pages/4566233

+ Recent posts