공유 라이브러리 개발 및 사용에 대해서
글쓴이: mirinae312 / 작성시간: 금, 2008/03/14 - 7:18오후
C로 라이브러리 a.so를 만들고 C++로 라이브러리 b.so를 만들었습니다.
a.so에서 b.so에 데이터를 보내서 가공한뒤 다시 받습니다.
b.so는 a.so로부터 데이터가 담긴 포인터를 받고,
b.so는 해당 포인터를 해제한 뒤에서 변경(가공)된 데이터의 크기만큼 다시 할당합니다.(alloc)
그러면 b.so는 a.so로부터 받은 포인터로 나머지 작업을 진행합니다.
//a.so
void f()
{
struct a* p = alloc(sizeof(s));
k(p);
}
//b.so
void (struct a* p)
{
// p를 가공
....
free(p);
p = alloc(sizeof(n));
// p에 데이터 삽입
}
windows에서는 특정 dll에서 할당한 메모리는 해당 dll에서 해제해야 한다는것을 기본 원칙으로하고...
컴파일 옵션에 따라서 다른 dll이 사용한 메모리를 해제하거나 할당하는 등의 프로세스를 가능하게 해주는 것으로 알고 있는데요... 리눅스 g++에는 이러한 옵션이 없나요?
컴파일에는 아무 문제가 없는데 실행시 에러가 나네요..
g++ 옵션은
-fPIC -c
라이브러리는
-share -Wl -O3 -Wall
로 링크시킵니다.
많은 가르침 부탁드립니다.
Forums:
댓글 달기