.lib 파일 검사 도구?
문서화되지 않은 일부 소프트웨어를 평가하고 있습니다. 샘플 프로젝트를 빌드 할 때 다음과 같은 링커 오류가 발생합니다.
오류 LNK2019 : 해결되지 않은 외부 기호
이 앱에는 lib 파일이 많지 않으므로 시행 착오를 통해이 문제를 해결할 수 있지만 이 문제를 해결 하는 더 우아한 방법이 있음을 알고 있습니다.
자바 세계에서 나는 항아리를 찾기 위해 FOO * .jar 을 grep 하고 C ++ 아날로그를 찾고 있습니다. Visual Studio 2005에서 C ++ 코드로 작업하고 있습니다.
/ LIST 옵션이있는 lib.exe 유틸리티가 정보를 얻을 수 있다고 생각하지만 지금까지 성공하지 못했습니다. 다음과 같이 인쇄됩니다.
Microsoft (R) Library Manager 버전 8.00.50727.762 저작권 (C) Microsoft Corporation. 판권 소유. granite50.dll granite50.dll granite50.dll granite50.dll ...
어떤 제안?
우선 어떤 유형의 라이브러리를보고 있는지 알아야합니다. 일부 라이브러리는 단순히 DLL (즉, 가져 오기 라이브러리)에 대한 링크를 포함하고 다른 라이브러리는 실행 가능 이미지의 일부가되는 코드 객체 (예 : 정적 라이브러리)입니다. 해당 출력의 모양에서 DLL 가져 오기 라이브러리를보고있었습니다.
다음으로 올바른 도구를 사용하려고합니다. Lib.exe는 라이브러리에서 개체 파일을 추출하는 데 사용됩니다. 이것은 Java 용 jar 유틸리티와 거의 동일합니다. Microsoft는 라이브러리에서 정보를 덤프하는 dumpbin.exe를 제공합니다. LarryF가 이미 이것을 언급 한 것을 봅니다 .
가져 오기 라이브러리의 경우 실행 dumpbin.exe -headers foo.lib
하고 출력 파일로 리디렉션합니다. 출력에는 관련 DLL이 내보내는 각 기호에 대한 스 니펫이 포함됩니다. 로 시작하는 줄을 검색합니다 " Symbol name :"
. 정확히 일치하려면 "기호 이름"앞뒤에 두 개의 공백이 있습니다. 출력을 실행하여 findstr
심볼 목록을 생성하고 좀 더보기 좋은 것을 원한다면 텍스트 파일로 리디렉션 할 수도 있습니다 .
dumpbin.exe -headers foo.lib | findstr /c:" Symbol name :" > foo-exports.txt
다른 옵션은 관련 DLL을 depends.exe
.
여기에서 한 가지 이상이 문제가 될 수 있습니다. lib 파일을 찾는 것이이 문제를 해결하는 가장 좋은 방법이 될지 모르겠습니다. IMHO ... 그러나 DUMPBIN.exe는 아마도 당신이 찾고있는 도구 일 것입니다. 명령 줄에서 사용하되 경로가 설정되어 있는지 확인하거나 VS 시작 메뉴에서 VS가 설치하는 "Visual Studio 명령 프롬프트"를 사용합니다.
DLL이 있고 코드에서 사용하려는 __declspec(dllimport)
경우 DLL 용 DEF 파일이 있으면 필요한 LIB 파일을 쉽게 만들 수 있습니다.
lib /def:mydll.def /nologo /machine:x86
mydll.lib 를 생성 합니다.
이 명령은 Visual Studio SDK 명령 프롬프트에서 실행해야합니다.
DEF 파일이없는 경우 수동으로 매우 쉽게 작성할 수 있습니다. DependencyWalker ( http://www.dependencywalker.com ) 에서 DLL을 열고 "다른 이름으로 저장"-> "가져 오기 / 내보내기 목록이있는 텍스트"를 선택합니다. 다음과 같이 txt 파일에 내 보낸 모든 함수 의 이름 과 서수 를 포함합니다.
Export Ordinal Hint Function Entry Point
------ ----------- ----------- -------------------------------- -----------
[C ] 2 (0x0002) 1 (0x0001) gsasl_base64_from 0x000024F0
[C ] 3 (0x0003) 2 (0x0002) gsasl_base64_to 0x000024A0
[C ] 4 (0x0004) 3 (0x0003) gsasl_callback 0x000018B0
[C ] 5 (0x0005) 4 (0x0004) gsasl_callback_hook_get 0x00001900
[C ] 6 (0x0006) 5 (0x0005) gsasl_callback_hook_set 0x000018F0
[C ] 7 (0x0007) 6 (0x0006) gsasl_callback_set 0x000018A0
[C ] 8 (0x0008) 7 (0x0007) gsasl_check_version 0x00001870
[C ] 9 (0x0009) 8 (0x0008) gsasl_client_mechlist 0x00001E20
[C ] 10 (0x000A) 9 (0x0009) gsasl_client_start 0x00001F40
나머지는 빠르게 완료됩니다. 다음 형식 의 DEF 파일 을 만듭니다 .
EXPORTS
gsasl_base64_from @2
gsasl_base64_to @3
gsasl_callback @4
gsasl_callback_hook_get @5
gsasl_callback_hook_set @6
gsasl_callback_set @7
gsasl_check_version @8
gsasl_client_mechlist @9
gsasl_client_start @10
gsasl_client_suggest_mechanism @11
@ 뒤에있는 숫자는 서수입니다.
PD : DependencyWalker는 C ++ 내보내기의 숨겨진 이름을 다음과 같이 꾸밀 수도 있습니다.
Foo@@YGHHH@Z --> int Foo(int, int).
이것은 Visual C ++ express 9 .lib로 작동했습니다.
dumpbin.exe -headers clangParse.lib | findstr / c : "COMDAT"> clangParse-exports.txt
or dumpbin.exe -headers clangParse.lib | findstr /c:"sym=" > clangParse-exports.txt
thank you d.shawley
open Visual Studio Command Prompt
dumpbin /all Effects11.lib > D:\1.txt
참고URL : https://stackoverflow.com/questions/488809/tools-for-inspecting-lib-files
'Nice programing' 카테고리의 다른 글
react-redux 컨테이너 구성 요소에 소품 전달 (0) | 2020.11.01 |
---|---|
"Windows SDK 버전 8.1"을 찾을 수 없다는 오류를 해결하는 방법은 무엇입니까? (0) | 2020.11.01 |
게터와 세터를 인라인으로 만드는 것이 좋은 습관입니까? (0) | 2020.11.01 |
Xcode 실행 스크립트 빌드 단계 "설치할 때만 스크립트 실행"옵션 (0) | 2020.11.01 |
텍스트 입력 기록 비활성화 (0) | 2020.11.01 |