문제

CGAL의 라이브러리를 사용하고 있으며 코드 컴파일의 연결 단계 에서이 양식의 많은 연결 경고가 생성됩니다.

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

Visual C ++/Studio 2008 에서이 특정 링커 경고를 끄는 방법은 무엇입니까?

내가 사용중인 외부 (CGAL) 라이브러리를 제어 할 수 없습니다. /donot은 외부 라이브러리를 다시 컴파일하기를 원할 수 없습니다. 따라서 내 끝에 메시지를 수정해야합니다.

도움이 되었습니까?

해결책

다음 링커 옵션으로 다음을 추가하십시오.

 /ignore:4099

이것은 속성-> 링커-> 명령 줄입니다

다른 팁

업데이트 2018-10-16

보도에 따르면 VS 2013 년 현재이 경고는 비활성화 될 수 있습니다. @Mark Ransom의 의견을 참조하십시오.

원래 답변

해당 특정 경고를 비활성화 할 수 없습니다.

에 따르면 Geoff Chappell 4099 경고는 /wx와 함께 사용하여조차도 무시하는 것이 너무 중요하다고 처리됩니다 (경고를 오류로 취급하고 다른 상황에서 지정된 경고를 무시할 것입니다).

다음은 링크의 관련 텍스트입니다.

명백 할 수없는 경고는 아닙니다

일부 경고 번호의 경우 A /무시 옵션의 사양이 수락되지만 반드시 작동하지는 않습니다. /wx 옵션이 활성화되지 않은 상태에서 경고가 발생하면 경고 메시지가 여전히 표시되지만 /wx 옵션이 활성화되면 경고가 무시됩니다. 마치 경고가이를 무시하려는 시도를 무시할만큼 중요하다고 생각되는 것처럼 보이지만 사용자가 위대한 경고에 너무 높은 가격을 책정 한 경우는 아닙니다.

다음 경고 번호가 영향을받습니다.

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

(레코드와 MSDN 포럼에서 스레드가 사라지기 전에) 비활성화 할 수없는 경고 목록에 있기 때문에 경고를 비활성화 할 수 없습니다 (SO /WD4099는 작동하지 않음). , 그러나 대신 할 수있는 것은 Patch Link.exe (일반적으로 c : program files (x86) microsoft visual studio 10.0 vc bin link.exe)입니다. Jackhammer처럼 들립니다. 그래도 작동합니다.

예를 들어, 4099에 대한 경고를 제거하려면 hex 편집기를 사용하여 link.exe를 열면 03 10 (4099의 Little Endian)을 읽고 FF 00 (존재하지 않음)으로 대체하십시오.

다른 사람들의 이익을 위해, 나는 내가 한 일을 포함 할 것입니다.

LNK4204 경고를 무시하기 위해 Visual Studio (2010 년)를 얻을 수 없으므로, 내 접근 방식은 원하는 것을 제공하는 것이 었습니다 : PDB 파일. 제 경우에는 오픈 소스 라이브러리를 사용하면서 코드가 이미 PDB 파일을 구축하고 있습니다.

그러나 기본값은 모든 PDF 파일의 이름을 동일하게 지정하는 것입니다. 각 .lib마다 .pdb가 필요하기 때문에 특히 20 개의 정적 .lib 파일을 생성하는 Imagemagik과 같은 것을 사용하는 경우 문제가 발생합니다. 하나의 디렉토리에 20 개의 LIB 파일을 가질 수 없으며 (애플리케이션의 링커 참조 라이브러리에서 링크에 대한 참조) 20 개의 .pdb 파일이 모두 동일한 것을 가지고 있습니다.

내 솔루션은 정적 라이브러리 파일을 가서 재건하고 VS2010을 구성하여 프로젝트와 관련하여 .pdb 파일의 이름을 지정하는 것이 었습니다. 이런 식으로 각 .lib는 유사하게 이름이 .pdb를 가져 오며 프로젝트를 사용할 수 있도록 모든 Libs와 PDB를 하나의 디렉토리에 넣을 수 있습니다.

따라서 "디버그"Configuraton의 경우 편집했습니다.

속성 -> 구성 속성 -> C/C ++ -> 출력 파일 -> 프로그램 데이터베이스 파일 이름 ~에서

$ (intdir) vc $ (PlatformToolSetVersion) .pdb

다음 값이 되려면 :

$ (outdir) vc $ (PlatformToolSetVersion) d $ (ProjectName) .pdb

이제 중간 디렉토리 어딘가에있는 .pdb 파일은 출력 디렉토리에 기록되며 .lib 파일도 작성되고 있으며 가장 중요한 것은 D+의 접미사로 명명되었습니다.프로젝트 이름. 이것은 각 라이브러리를 의미합니다 프로젝트 Produduces 프로젝트 .lib 및 프로젝트 별 .pdb.

이제 모든 릴리스 .lib 파일, 디버그 .lib 파일 및 디버그 .pdb 파일을 개발 시스템의 한 곳에 복사 할 수 있으며 디버그 모드에서 해당 타사 라이브러리를 사용하는 프로젝트는 PDB를 가지고 있습니다. 디버그 모드에서 필요한 파일.

/incore는 vc6 link.exe 옵션이라고 생각합니다. VS2005 및 VS2008의 링커의 경우 사용 가능한 문서화 /무시 옵션이 없지만 링커는 " /ingore : xxx"옵션, 오류 및 효과가 없음을 무시합니다.

PDB 파일은 일반적으로 디버그 정보를 저장하는 데 사용됩니다. 이 경고는 아마도 파일이기 때문에 발생합니다 vc80.pdb 대상 객체 파일을 연결할 때는 찾을 수 없습니다. LNK4099의 MSDN 항목을 읽으십시오 여기.

또는 프로젝트 속성> 링커> 디버깅> 디버그 정보 필드 생성에서 디버그 정보 생성을 해제 할 수 있습니다.

편집 : VC80 / Visual Studio 2005를 사용하지 않지만 CGAL 라이브러리의 Visual Studio 2008 / VC90 버전 (아마도 ~에서 여기).

링커 도구 경고 LNK4099:

/Z7을 컴파일 할 수도 있으므로 PDB를 사용하지 않거나 연결중인 객체에 대한 .pdb 파일이없는 경우 /디버그 링커 옵션을 제거 할 필요가 없습니다.

@John Weldon과 같이 링커 경고 4099를 비활성화 할 수 없습니다.

일부 프로젝트 구성 변경으로 라이브러리를 재구성해야합니다. 몇 가지 옵션이 있습니다.

  • 디버그 정보로 PDB 파일을 저장하십시오. 설정 값 "$ (outdir) $ (TargetName) .pdb"to Properties-> c/c ++-> 출력 파일 프로그램 데이터베이스 파일 이름
  • .lib 파일에 디버그 정보를 저장하십시오. 속성에 "C7 호환 (/z7)"을 설정하는 값-> C/C ++-> General-> 디버그 정보 형식
  • 이 라이브러리의 생성 디버그 정보를 비활성화합니다. 속성에서 값 제거-> c/c ++-> 일반-> 디버그 정보 형식
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top