2009-05-11 4 views
6

우리 프로젝트는 많은 정적 라이브러리를 사용하여 애플리케이션을 구축하고 있습니다. 릴리스 빌드에서 응용 프로그램의 릴리스 버전을 사용하고 있는지 확인하려면 어떻게해야합니까?라이브러리가 DEBUG 또는 RELEASE 빌드인지 확인하는 방법은 무엇입니까?

릴리스 응용 프로그램 빌드에서 디버그 라이브러리를 사용하여 실수를 저지르고 있습니다.

특정 라이브러리가 릴리스인지 또는 디버그인지를 확인하고 일치하지 않는 경우이를보고 할 수있는 모듈을 작성할 수있는 우아한 방법을 찾고 있습니다. 우리의 응용 프로그램은 C/C++로 작성되었습니다. (플랫폼 MSVC & GCC)

+1

당신은 당신이 사용하고있는 툴 체인 및 플랫폼에 추가 할 수 있습니다를, 예를 들어, MSVC, GCC? –

+0

릴리스 또는 디버그 빌드인지 여부를 나타내는 일종의 표시기가 라이브러리에 있습니다. –

답변

2

일반적인 접근 방식은 라이브러리에 다른 이름을 지정하거나 디버그 및 릴리스와 같은 다른 디렉토리에 저장하는 것입니다. 빌드가 올바르게 자동화 된 경우 실수를 할 수있는 방법을 알 수 없습니다. 당신은 단지 객체 파일 이름으로 시작하는 빈 라인 또는 라인을 얻는 경우에 당신에게,

objdump -g mylib.a 

다음 :

+0

의 당신이 라이브러리의 무리를 상속하고 그들이 구축하고 방법을 모르는 가정 해 봅시다. 그 (것)들을 연결하고 실패를 기다리기의 짧은 것은 알아낼 방법 있는가? 디버그 기호가 PDB에있는 경우 – stu

2

이름 지정 규칙 (즉, foo_rel.afoo_dbg.a)을 사용하여 해결할 수 없습니까?

0

일반적으로 약간 다른 이름을 사용하여 버전을 구별합니다. 예를 들어, 디버그 빌드에서 모든 라이브러리는 확장자 앞에 'd'문자가 붙습니다. 전의. commonUtilsd.lib 릴리스 모드에서는 동일하게 commonUtils.lib이됩니다. 이 방법은 IMHO가 더 간단하고 깨끗합니다. MSVC에서 사용하는 또 다른 추천 구성 디렉토리에서 이러한 출력 파일을 가지고있다

Librarian-->General-->Output File 

에서 출력 파일 이름을 지정할 수 있습니다. 디버그 폴더에 디버그 버전이 있고 릴리스 폴더에 릴리스 버전이 있습니다. 다시 MSVC에서이 작업은 일반적으로 $ (ConfigurationName) IDE 매크로를 사용하여 수행 할 수 있습니다. 빌드하는 동안 조회 디렉토리에 올바른 경로를 첨부하십시오.

1

당신이 유닉스 시스템에 있다면, 당신은 아마의 출력을 구문 분석 할 수 있습니다, 옆으로 명명 규칙 라이브러리에 디버그 정보가 없습니다.

일반적으로 라이브러리가 "릴리스"또는 "디버그"라는 의미는 아니지만, 일 수 있습니다.은 귀하의 경우를 의미합니다.

4

예. 파일의 IMAGE_FILE_HEADER 구조의 Characteristics 필드를 확인할 수 있습니다. 라이브러리가 릴리스 빌드 인 경우 비트 0x0200 (DEBUG_STRIPPED)이 설정됩니다. 디버그 빌드에서 명확해질 것입니다.

Windows EXE 및 DLL에서 사용되는 PE 형식에 대한 기술 정보는 'net'(예 : here)의 다양한 위치에서 구조를 검색하는 방법을 참조하십시오.

+0

나는 디버그 및 릴리스 구별 할 수 없습니다. 내가 디버그 한 C++ DLL을 컴파일 (디버그 기호가 PDB에 제거됩니다) 및 모드를 해제하고 DEBUG_STRIPPED 비트를 구별 할 수 없습니다. – qub1n

1

라이브러리의 버전을 반환하는 간단한 함수는 어떻습니까? 디버그 또는 릴리스중인 빌드를 기반으로 다른 것을 반환하십시오. 앱 시작시 해당 함수를 호출하고 오류를보고하십시오.

+0

너무 다른 모든 쓰레기가 제안보다 간단합니다. –

+0

네, 좋은 제안 – Manoj

0

내가 사용하고 성공적으로이 코드를 테스트 :

using System.Diagnostics; 

FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(fileName); 
return fvi.IsDebug; 
+0

이에 대한 명령 줄/GUI 도구가 있습니까? – stu

관련 문제