C , C++, C#

[Visual Studio] 라이브러리 덤프하기

vhxpffltm 2022. 9. 5. 21:03

c++ softfloat 써드 파티를 사용해야 하는데

 

이를 라이브러리로 빌드하여 필요한 모듈에 링킹하는 작업이 필요하다.

 

그런데.. 계속해서 링킹에러가 발생해서.. 열심히 하던중..

 

CMake Configuration을 잘못했는지 원본의 make를 제대로 안했는지.. 알 길이 없다.

 

결국 처음부터 다시 시작해 원본의 makefile과 같도록 헤더와 소스파일을 활용하여 

 

컴파일 및 빌드까지 완료해서 라이브러리를 새로 만들었다.

 

하지만 다른 모듈과 링킹 에러이다... 해당 기호가 진짜 라이브러리에 없는건가....

이제 라이브러리를 뜯어봐야되는데 어떻게 뜯을 수 있는지 간단히 알아보자.

 

Visual Studio 2022에서 Cmake 프로젝트를 만들면 간단한 샘플 파일을 얻을 수 있다.

 

샘플 코드는 아래와 같다.

 

 

간단한 클래스가 있고 헤더파일과 소스파일이 있다.

 

이 두 파일을 컴파일하여 정적 라이브러리로 만들어 아래의 결과물을 만들어 낼수 있다.

 

 

이제 이 라이브러리를 dumpbin으로 떠보자.

 

dumpbin은 VS 개발자 도구 명령 prompt를 사용하면 실행할 수 있다. 

아래와 같은 옵션들을 제공한다.

 

 

/ALL 옵션으로 하면 너무 많은데

간단한 프로그램으로 덤프를 떠보면 어떤 정보들이 남겨지는지 대강 확인할 수 있다.

 

이중에 우린 외부 기호가 있는지 보고싶으니 /SYMBOLS를 사용해본다.

dumpbiin [옵션] [라이브러리]

dumpbin /SYMBOLS CMakeProject1.lib

 

 

위 그림처럼 일부에 사용된 Extenral 함수 심볼들을 확인할 수 있다.

우리가 클래스로 정의한 4개의 연산 함수와 main함수에서 사용한 iostream 관련 operator을 확인할 수 있다.

 

외부 기호 에러인 링킹에러를 확인할 때 이같이 라이브러리를 덤프해서 확인해볼 이유가 있다.