가정하자 나는 정적 라이브러리에서 단일 클래스 S는, 이것은 다른 동적 라이브러리 D1 D2 D3와 연결 할 수 있습니다싱글 클래스
내가 클래스 S는 별도의있을 것이다 이해하는 것과 그래서인스턴스가 각각 D1, D2 및 D3에 있으며 이는 단일 노드가 아니더라도 true입니다 (예 : 글로벌)
클래스 S의 여러 복사본을 방지 할 수있는 방법이 있습니까? 싱글 톤 S를 다른 동적 라이브러리에 넣을 수 없습니다.
Executable
/ | \ \
D1 D2 D3 D4
| | |
S S S
EDIT : 싱글 톤 S 별도로 ... D1 D2 D3과 연결되는 별도의 정적 라이브러리이다.
내가이 샘플 메이크 (가 .DLL 교체입니다 물건을 확인하는 간단한 테스트 케이스를 만들어 :싱글 톤은 힙에 할당됩니다 만 포인터가
static s::instance()
{
static smart_ptr<S> ptr = NULL;
if(ptr == NULL) ptr = new S;
return ptr;
}
Edit2가 정적이다. 그래서) 나는 물건을 체크 아웃했다. 나는 우분투와 Cygwin에서 체크했다. g ++ 컴파일러와 동작은 다르다. Cygwin은 2 개의 다른 객체를 만들었지 만 우분투는 1 개의 객체를 만들었습니다
all: dynamic1 dynamic2 main
static: static.cpp
g++ -c -fPIC static.cpp -o obj/static.o
ar rvs lib/static.a obj/static.o
dynamic1: static dynamic1.cpp
g++ -fPIC -shared dynamic1.cpp lib/static.a -o lib/libdynamic1.dll
dynamic2: static dynamic2.cpp
g++ -fPIC -shared dynamic2.cpp lib/static.a -o lib/libdynamic2.dll
main: dynamic1 dynamic2 main.cpp
g++ --std=c++11 main.cpp -ldynamic1 -ldynamic2 -o lib/main -L./lib
귀하의 의도는 무엇입니까? 공유 리소스에 대한 액세스를 제어하려는 경우 프로세스 간 동기화를 사용할 수 있습니다 (예 : [boost] (http://www.boost.org/doc/libs/1_61_0/doc/html/interprocess/synchronization_mechanisms.html)) –
아니요 이것은 프로세스 간의 공유 메모리가 아닙니다. – tejas
@tejas : 왜 Windows에서 S를 DLL로 만들 수 없습니까? –