[C, macOS] 상대경로 공유라이브러리
공유라이브러리는 자주 쓰는 함수들을 바이너리 형태로 만들어 두고, 필요할 때 불러서 쓸 수 있도록 합니다. c에서 공유라이브러리를 상대경로로 컴파일하지 않으면, 프로그램을 옮길때마다 일일히 라이브러리경로를 설정해줘야 하는 불편함이 있습니다. 오늘은 상대경로의 공유라이브러리 만드는 법을 알아보도록 합니다. 예시코드는 다음과 같습니다. 1. foo.c #include <stdio.h> void foo( void ) { puts( "Hello, I'm a shared library" ); } 2. foo.h #ifndef foo_h__ #define foo_h__ extern void foo( void ); #endif // foo_h__ 3. main.c #include <stdio.h> #include "foo.h" int main( void ) { puts( "This is a shared library test..." ); foo(); return 0 ; } foo 함수는 텍스트를 출력하는 함수이고, 메인함수는 foo 함수를 불러오는 테스트 코드입니다. 컴파일 환경은 gcc이고 macOS에서 컴파일하였습니다. 순서는 다음과 같습니다. 1. 오브젝트 파일 만들기 $ gcc -c foo.c 2. 공유라이브러리 컴파일하기 $ gcc -dynamiclib -install_name '@rpath/libfoo.dylib' foo.o -o libfoo.dylib 3. 메인함수 컴파일하기 $ gcc -L/Users/leejijin/Desktop -Wl,-rpath,'@executable_path' -o test main.c -lfoo -L 뒤에는 컴파일 할 라이브러리의 경로...