다른 버전의 Visual Studio 2002 이상에서 구축 된 C 코드의 정적 라이브러리 혼합

StackOverflow https://stackoverflow.com/questions/462768

문제

Visual Studio 2002 C (v7.0) 컴파일러와 Intel Fortran 9.0.018 컴파일러를 사용하여 컴파일되고 연결된 C 및 Fortran 루틴의 정적 연결성 라이브러리가 있습니다.

내 라이브러리의 C 코드는 Microsoft C-Runtime (MSCRT) 2002 정적 라이브러리 (단일 스레드)에 대한 링크를 호출하고 링크합니다. 2002 CRT 라이브러리의 실제 버전 번호는 V7.0이라고 생각합니다.

이 정적 라이브러리를 "vs2002if9.lib"라고합니다.

C 런타임 통화와 관련하여 호출 프로그램이 어떻게 작동하는지에 대한 걱정없이 나중에 Visual Studio (2003, 2005 또는 2008)의 "VS2002IF9.lib"에 정적으로 링크 할 수 있습니까?

아니면 CRT 정적 리브의 버전을 믹싱하여 문제를 일으키고 있습니까?

제 3 자 소프트웨어 개발자에게 "vs2002if9.lib"를 제공하면 어떻게됩니까? 내가 그들에게 어떤 요구 사항을 부과하고 있습니까?

도움이 되었습니까?

해결책

믹싱 C runtimes는 과거에 저에게 효과가 없었습니다. 이 작동하는 유일한 방법 {아마도}는 정적으로 연결된 C- 런타임의 경계 내에서 스택/힙의 사용을 완전히 분리하는 것입니다 [매개 변수를 통해 경계를 넘어서는 것은 없지만 vs2009if9는 어떤 가치가 있습니까? .lib 제공].

예를 들어, 애플리케이션 내에 포인터 [힙 메모리]를 할당 하고이 포인터를 제공 한 라이브러리로 전달하는 경우 어떤 힙 관리자를 사용해야합니까? 정답은 포인터를 관리하는 힙 관리자이지만 라이브러리는 다른 힙 관리자에 대해 알지 못합니다. 라이브러리가 애플리케이션에서 사용하기 위해 메모리를 할당하면 제공된 포인터를 사용하여 무료/삭제에 대한 응용 프로그램 책임자입니다 (불량 디자인 예이지만 여전히 가능). 다시, 잘못된 힙 관리자가 활용 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top