티스토리 뷰
CMake에서 static 이 아닌 shared로 하면 대충 된다.
대충... 왜 안되지 했다가 그 수많은 export 을 빼먹을 기억하고
그냥 다시 static으로 돌아갔다.
http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/
gcc -Wall -c ctest1.c ctest2.c
ar rcs libctest.a ctest1.o ctest2.o
gcc -static cprog.c -L. -lctest -o cprog
./cprog
static 도 위 처럼 있고, dynamic, POSIX 까지 설명되어있다.
https://stackoverflow.com/questions/14173260/creating-shared-libraries-in-c-for-osx
이게 원 질문글인데,
osx 에서는,
Use -dynamiclib option to compile a dynamic library on OS X:
g++ -dynamiclib -o libutils.dylib utils.cpp
And then use it in your client application:
g++ client.cpp -L/dir/ -lutils
위처럼 하는데, so, dylib 둘다 아래 에러가 뜬다
Undefined symbols for architecture x86_64:
osx에서는 bundle 이 so 역활이고, dylib, so 모두 bundle 처럼 쓸 수 있다고 한다.
인자를 bundle 형식으로 넣어야한단다
참조파일 확인은, 아래와 같이
http://log.zyxar.com/blog/2012/03/10/install-name-on-os-x/
newpolaris@Donghyuns-MacBook-Pro : ~/Projects/testDynamicLibrary
$ otool -L a.out
a.out:
libutils.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
CMAKE 설정 및 dylib는 아래에
cmake ... -DBUILD_SHARED_LIBS=OFF ...
creates .so files while
cmake ... -DBUILD_SHARED_LIBS=ON ...
creates .dynlib files.
자세한 설명은,
http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html
http://egloos.zum.com/sweeper/v/2991664
애플리케이션의 로딩 속도를 향상시키기 위해 실행 파일과 DLL 모듈에 대해
시작 위치 변경(rebase)과 바인딩(binding) 작업을 수행하는 것이 좋다.
Rebase와 binding에 대해서는 추후 별도로 글을 하나 더 쓰는 것이 좋을 듯 하다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크