티스토리 뷰

카테고리 없음

so 파일 만들기

newpolaris 2019. 6. 22. 16:49

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:

http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-three-dynamic-libraries-using-posix-api/

osx에서는 bundle 이 so 역활이고, dylib, so 모두 bundle 처럼 쓸 수 있다고 한다.

인자를 bundle 형식으로 넣어야한단다

https://stackoverflow.com/questions/2339679/what-are-the-differences-between-so-and-dylib-on-osx/46671058#46671058

참조파일 확인은, 아래와 같이

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는 아래에

https://stackoverflow.com/questions/2339679/what-are-the-differences-between-so-and-dylib-on-osx/46671058#46671058

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에 대해서는 추후 별도로 글을 하나 더 쓰는 것이 좋을 듯 하다.

http://sweeper.egloos.com/2991338

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크