2012-06-17 2 views
1

부스트에 대한 종속성이있는 응용 프로그램을 빌드 중입니다. 내 응용 프로그램 출력은 다른 클라이언트 응용 프로그램에서 사용되는 라이브러리입니다. 최근에/MDd를 사용하여 코드 생성 (CRT 라이브러리 디버깅)을 사용하는 디버그 모드에서 응용 프로그램을 빌드하고 클라이언트 응용 프로그램이 디버그 모드에서도 CRT 릴리스에 맞게 빌드되었음을 발견했습니다. 따라서 메모리 힙 손상 오류가 발생할 수 있습니다. 확인하기 위해,이 릴리스 모드에서 모든 것을 테스트하고 거기에 모두 잘 작동합니다.부스트에서 종속성 문제가있는 릴리스 CRT 디버그 응용 프로그램 빌드

이 문제를 해결하기 위해 CRT 릴리스 라이브러리에 대한 디버그 모드로 응용 프로그램을 만들었지 만 독립 실행 형 테스트의 응용 프로그램은 런타임에 실패합니다. 내 이해가 부스트 의존성으로 인해 부스트 디버그는 아마도 디버그 CRT 라이브러리에 대해 만들어진 무엇입니까? 나는 부스트 워드 프로세서를 보았지만, 정확히 내가 원하는 것을 찾지 못했습니다 ... 어떻게 릴리즈 CRT에 대해 부스트 (디버그 모드에서)를 다시 빌드하는 것입니까? 어떤 도움/아이디어/예를 감사하십시오. 시간 내 줘서 고마워!

답변

1

나는 비슷한 문제가 과거에 발생했습니다. 디버깅 기능이 켜져있는 릴리스 빌드 만 사용하여이 문제를 해결했습니다. 기본 릴리즈 구성을 변경하여 필요한 모든 디버그 정보를 생성하고 최적화를 생략하거나 그 중 일부를 생략하거나 기본 릴리즈 구성의 복제본을 생성하여 원본 (즉, 실제 출시)과 디버그 - 활성화 된 릴리스 구성.

+0

감사합니다. @Kepp, "디버그 정보로 릴리스"빌드를 시도했는데 (너무 짧은 시간 전); 하지만 지금은 내 예제를 테스트 할 때 클라이언트 응용 프로그램에서 이상한 동작을 보게됩니다. 정확히 말하면 std :: string으로 문자열을 지정할 때 client_str = some_namespace_in_library :: class_name :: string_name; client_str이 할당되지 않았으며 비어있는 것으로 나타났습니다. 어떤 아이디어? –

2

@ AlKepp의 답변 외에도 종속성 워커 (http://dependencywalker.com/)을 살펴볼 것을 제안합니다. 라이브러리 또는 응용 프로그램이 의존하는 라이브러리를 보여주는 무료 도구입니다. 일반적으로 Microsoft C/C++ 런타임 DLL의 릴리스 또는 디버그 버전 만 표시되는지 확인해야합니다 (예 : MSVCP90.DLLMSVCP90D.DLL).

앱이 런타임에 더 많은 라이브러리 (예 : 플러그인)를로드하는 경우 Profile->Start Profiling을 사용하여 종속성 워커에서 애플리케이션을 실행하십시오. 그런 다음 실제로로드되거나 실행 중에로드하려고 시도한 모든 라이브러리를 보여줍니다.

이것은 의존성 문제를 해결하는 데 큰 도움이되며, 릴리스 및 디버그 빌드를 실수로 혼합 한 경우 특히 유용합니다.

+0

감사합니다. @Johannes : Depends로 테스트했습니다. 예상대로 두 가지가 모두 표시됩니다. 그러나 나는 또한 여기 http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/0f627804-d4d6-4606-bb2a-a5cc0516767d에서 우리가 할당/할당 해제를 완전히하는 한 타사 DLL (이 경우, 내 응용 프로그램), 괜찮을 것입니다. 그래서 예를 들어 const-ref로 문자열을 DLL 경계를 넘어서 전달하는 것이 좋습니다. –

관련 문제