2011-01-29 6 views
0

동적으로 링크 된 라이브러리를 사용하는 C++ 응용 프로그램이 있습니다. 응용 프로그램 및 라이브러리를 대상에 배치하고 응용 프로그램이 실행 중입니다. 이제 나는 도서관에서 어떤 것을 바꿔서 도서관을 만들었고 목표물에있는 오래된 도서관을 새로운 도서관으로 바 꾸었습니다.C++의 동적 라이브러리

내 질문

  1. 응용 프로그램 밖으로 recompliing하고 다시 링크 새로운 libarary를 취합니까입니까?

고마워요!

답변

1

예, 새 라이브러리가 이전 라이브러리와 호환되는 ABI 인 경우에만 가능합니다.

웹에서 다양한 정보를 찾을 수 있습니다. 이진 호환성에 대해 this FAQ을 읽어 보시기 바랍니다.

0

예, 인터페이스가 변경되지 않은 한. 동적 링크 라이브러리의 장점 중 하나입니다.

0

예. 라이브러리는 런타임에 동적 링커에 의해로드됩니다. ABI가 유지되는 한 (동일한 컴파일러 및 버전) 코드는 다시 컴파일 할 필요없이 새 코드를 원활하게 사용합니다.

0

이진 호환성에 대해 이야기하고 있고 응용 프로그램을 다시 컴파일하고 다시 링크해야하는지 여부는 peoro의 답변에서 제공하는 링크를 읽어야합니다.

그러나 "응용 프로그램이 실행 중입니다"라는 질문에 약간 혼란스러워합니다. 실제로 라이브러리를 교체 할 때 실행 중이라는 것을 의미하면 라이브러리가 처음 다시 시작되거나 다른 응용 프로그램 인스턴스가 시작되지 않는 한 새 버전이 사용되지 않습니다 (그러나 이전 인스턴스는 여전히 라이브러리를 사용합니다). 구 버전). 모든 OS가 응용 프로그램에서 사용중인 라이브러리를 대체 할 수있는 것은 아니지만 해결 방법이 있습니다. Windows에서는 기존 라이브러리를 덮어 쓰거나 삭제할 수 없지만 새 버전을 배치하기 전에 이동하거나 이름을 바꿀 수 있습니다. Linux에서는 이전 버전을 삭제할 수 있으며, install 명령을 사용하여 새 버전을 복사하면 자동으로 수행됩니다. 하지만 이전 버전은 파일 시스템에서 물리적으로 삭제되지 않고 응용 프로그램이 끝날 때까지는 보이지 않습니다.

관련 문제