특정 dll을 바인딩 시키지 않으려면 어떻게 하죠?
글쓴이: kleinstein / 작성시간: 목, 2007/12/06 - 10:28오후
안녕하세요..
좀 복잡한 사정으로..
msvcrt.dll 혹은 msvcrtd.dll 을 빌드시킬때 제외시키고 싶은데요.
대신 msvcrt80.dll 등을 바인딩 시키려구요..
사실 전 왜 msvcrt.dll 가 빌드할때 들어가는지 모르겠습니다.
이게 어느 lib와 관련있는지, 또 어떤 링크옵션 때문에 바인딩 되는지도 모르겠구요..
그래서 이렇게 질문드리는데요..
이렇게 빌드시에 특정 dll이 실행화일안으로 바인딩되는걸 막으려면 어떻게 해야 하나요?
Forums:
링커 옵션에
링커 옵션에 /NODEFAULTLIB[:libname] 옵션을 사용하시면 됩니다.
Orion Project : http://orionids.org
링커 옵션에
링커 옵션에 /NODEFAULTLIB[:libname] 옵션을 사용하였는데도 불구하고 프로그램을 실행시키면 원치않는 dll들이 같이 딸려서 실행됩니다.
저는 사용하지도 않는 dll들인데요..
이렇게 원치 않는 dll들이 실행되지 않도록 하는 방법은 없는건가요?
릴리즈로 컴파일
릴리즈로 컴파일 하시면 자동으로 링커가 참조하지 않는 라이브러리는 제거를 합니다.
실행시 스스로 명시적으로 사용한다고 하지 않은 dll이 로딩된다고 해도 mfc나 main함수 이전의
startup코드에서 해당 dll의 함수를 사용하기 때문에 로드가 되는 것입니다.
또는 예를들어 프로그램에서 로드하는 특정 dll에서 msvcrt.dll를 사용할수도 있습니다.
이런 경우에도 자동로드가 되고, 만약에 그런 경우라면 그 특정 dll을 msvcrt80.dll을 사용하도록
재컴파일 하는 방법밖에 없습니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
startup코드 라는 말을
startup코드 라는 말을 들으니까.. 머리에 잘 떠오르지 않습니다.
mfc 나 main 함수 이전의 startup 코드라는게.. 어떤건지요?
그리고 릴리즈 모드로 컴파일 하는 것 이외에는 링커가 참조하지 않는 라이브러리를 Debug 모드에서 제거 시킬 수 있는 방법이 없나보죠?
댓글 달기