static 라이브러리를 shared 라이브러리에 포함할 때
static 라이브러리의 심볼이 외부에 노출되지 않도록 hidden symbol 작업이 필요하다.
<필요한 작업>
1. static library 빌드하는 쪽 - hidden symbol 작업
2. shared library 빌드하는 쪽 - hidden symbol 작업, export symbol 작업
* static library 빌드하는 쪽 - hidden symbol 작업 (컴파일 옵션 추가)
HP-UX 32비트
export CFLAGS='-Bhidden -D_REENTRANT’
HP-UX IA64 64비트
export CFLAGS=’-Bhidden -D_REENTRANT’
SUNOS 32/64비트
export CFLAGS=-fPIC
* shared library 빌드하는 쪽 - hidden symbol 작업, export symbol 작업 (링크 옵션 추가)
** hidden symbol 작업
Linux
** export symbol 작업 - shared library에서 노출시킬 symbol 리스트 만들기
SunOS
expsymbols.sym 내용 예제
{
global:
test_function;
test_function2; <- 노출심볼
local:*; <- 모든 심볼 hide
}
HP-PA 64비트
expsymbols_pa64.sym 내용 예제
set(CMAKE_SHARED_LINKER_FLAGS"${CMAKE_SHARED_LINKER_FLAGS}
-Wl,+hideallsymbols,+linkersyms,\
+e,test_function,\
+e,test_function2\
")
* 주의사항
** HP-IA 64비트 shared library 빌드시 static library를 링크할 때 순서에 민감하게 반응한다.
shared library를 링크할 때에는 -L {위치} -l {라이브러리 이름} 으로 링크했었는데, static library 링크시에는 컴파일하는 파일들을 나열할 때 함께 써준다.
<shared library 링크할 때>
cc -o test.so +DD64 -b -D_REENTRANT -L../test/test2 -ltest \ -lpthread \ test1.c test2.c test3.c |
<static library 링크할 때>
cc -o test.so +DD64 -b -D_REENTRANT \ -lpthread \ test1.c test2.c test3.c \ ../test/test2/test.a |
끝!
'컴퓨터 > 기타' 카테고리의 다른 글
[Unix] 단말기 폭 초과 발생 시 해결 방법 (0) | 2015.12.08 |
---|---|
무선네트워크 드라이버 설치 후에도 잡히지 않을 때 (1) | 2015.11.19 |
FPE에 대한 이해 (0) | 2014.07.09 |
SVN에 sh파일 커밋 (1) | 2014.02.17 |
FAT32, NTFS 의미래 (1) | 2013.04.22 |