동적으로 링크 된 라이브러리를 사용하는 C++ 응용 프로그램이 있습니다. 응용 프로그램 및 라이브러리를 대상에 배치하고 응용 프로그램이 실행 중입니다. 이제 나는 도서관에서 어떤 것을 바꿔서 도서관을 만들었고 목표물에있는 오래된 도서관을 새로운 도서관으로 바 꾸었습니다.C++의 동적 라이브러리
내 질문
- 응용 프로그램 밖으로 recompliing하고 다시 링크 새로운 libarary를 취합니까입니까?
고마워요!
동적으로 링크 된 라이브러리를 사용하는 C++ 응용 프로그램이 있습니다. 응용 프로그램 및 라이브러리를 대상에 배치하고 응용 프로그램이 실행 중입니다. 이제 나는 도서관에서 어떤 것을 바꿔서 도서관을 만들었고 목표물에있는 오래된 도서관을 새로운 도서관으로 바 꾸었습니다.C++의 동적 라이브러리
내 질문
고마워요!
예, 새 라이브러리가 이전 라이브러리와 호환되는 ABI 인 경우에만 가능합니다.
웹에서 다양한 정보를 찾을 수 있습니다. 이진 호환성에 대해 this FAQ을 읽어 보시기 바랍니다.
예, 인터페이스가 변경되지 않은 한. 동적 링크 라이브러리의 장점 중 하나입니다.
예. 라이브러리는 런타임에 동적 링커에 의해로드됩니다. ABI가 유지되는 한 (동일한 컴파일러 및 버전) 코드는 다시 컴파일 할 필요없이 새 코드를 원활하게 사용합니다.
이진 호환성에 대해 이야기하고 있고 응용 프로그램을 다시 컴파일하고 다시 링크해야하는지 여부는 peoro의 답변에서 제공하는 링크를 읽어야합니다.
그러나 "응용 프로그램이 실행 중입니다"라는 질문에 약간 혼란스러워합니다. 실제로 라이브러리를 교체 할 때 실행 중이라는 것을 의미하면 라이브러리가 처음 다시 시작되거나 다른 응용 프로그램 인스턴스가 시작되지 않는 한 새 버전이 사용되지 않습니다 (그러나 이전 인스턴스는 여전히 라이브러리를 사용합니다). 구 버전). 모든 OS가 응용 프로그램에서 사용중인 라이브러리를 대체 할 수있는 것은 아니지만 해결 방법이 있습니다. Windows에서는 기존 라이브러리를 덮어 쓰거나 삭제할 수 없지만 새 버전을 배치하기 전에 이동하거나 이름을 바꿀 수 있습니다. Linux에서는 이전 버전을 삭제할 수 있으며, install
명령을 사용하여 새 버전을 복사하면 자동으로 수행됩니다. 하지만 이전 버전은 파일 시스템에서 물리적으로 삭제되지 않고 응용 프로그램이 끝날 때까지는 보이지 않습니다.