2014-07-09 2 views
0

두 개의 모듈이있는 AB 프로젝트가있는 경우 둘 다 세 번째 라이브러리 C과 연결됩니다. 런타임시 동적 라이브러리 대 정적 라이브러리

그것은 CAB에서 다음 호출 C로 만든 정적 라이브러리를 경우 각각 C의 분리 상태를 유지하는 것이 사실인가요? 서로 다른 힙을 가지고 있습니까?

C이 공유 라이브러리 인 경우 AB은 공유 상태 C에 액세스 할 수 있습니까?

p.s. 응용 프로그램 진입 점은 A 또는 B입니다.

+0

대단히 사용자의 OS에 따라 다릅니다. Windows DLL은 \ * nix 공유 객체와 매우 다르게 작동하며 \ * nix의 모든 특성과 연결 방법에 대한 단일 작업 모드는 없습니다. –

답변

2

OS에 따라 다르며 컴파일 할 때 사용하는 옵션과 링크가 있습니다. Unix에서는 기본적으로 둘 이상의 공유 라이브러리에있는 모든 공통 기호가 첫 번째 라이브러리의 이름으로 해석됩니다. ; 대부분의 Unix에서이 이름은 주 이름에 (Linux에서는 GNU 링커에 특수 옵션 이 필요합니다.)가 적용됩니다. Windows에서는 조금 더 까다 롭습니다. 각각의 정적으로 링크 된 라이브러리는 자체 복사본을 가지며 정적 라이브러리를 래핑하고 세 번째 DLL을 만들고 그 라이브러리에있는 DLL의 기호를 통해서만 액세스하는 것 이외에는 쉽게 해결할 방법이 없습니다 ( ).

+0

xcode 5와 함께 OS X 10.8을 사용 중이며 시스템과 함께 컴파일 링이 제공됩니다. 공통 기호를 동일한 이름으로 해결하는 데 필요한 플래그는 어디에서 찾을 수 있습니까? – Enzo

+0

** 동적 라이브러리 **를 사용하십시오. 정적 링크로 작업하게하려면 불필요한 해커가 필요합니다. 하지마. –

+0

알았어 : 조언 주셔서 감사! – Enzo

1

정적 연결 대 동적 연결은 응용 프로그램의 관점에서 연결된 라이브러리의 상태 관리에 영향을 미치지 않습니다. 라이브러리는 단일 상태이며 모든 종속 모듈이 종속되어 있습니다.

나는 당신이 정적 링크 대 동적 링크가 운영 체제를 허용하는 최적화에 있다고 생각합니다. 동적 라이브러리는 메모리에 한 번로드되어이를 사용하는 각 프로세스마다 다르게 매핑 될 수 있습니다. 이렇게하면 이미로드 된 페이지의 정확한 사본을로드 할 필요가 없습니다.

+0

흠 좋습니다. 내 응용 프로그램에서 모듈 B에서 액세스 한 상태가 괜찮은 문제가 발생했기 때문에 이상하지만 모듈 A에서 모듈에 액세스하려고하면 손상됩니다. – Enzo

+0

그리고 누군가 정적 라이브러리 대신 C 라이브러리를 공유 라이브러리로 구축 할 것을 제안했습니다. – Enzo

+0

어떤 플랫폼입니까? 다중 스레드 응용 프로그램입니까? –

관련 문제