Microsoft Visual C++ 10에서 프로그램을 컴파일하고 PDCurses 라이브러리를 사용합니다. pdcurses.lib와 연결되도록 구성했지만 응용 프로그램을 실행하려고하면 "pdcurses.dll"을 찾을 수 없다는 불만을 표시합니다. 그것에 대해 불평하지 않아도됩니다. 나는 MinGW (GCC)와 프로그램을 컴파일하는 데 사용하고 응용 프로그램을 실행하려고하면 DLL에 대해 묻지 않습니다. MSVC가 PDCurses를 정적으로 링크하도록하려면 어떻게해야합니까?MSVC에서 라이브러리를 정적으로 링크하는 방법은 무엇입니까?
답변
MSVC에서 .lib
파일은 두 가지 형태를 취할 수 있습니다
- 정적 라이브러리
- 전자는에서 보낸 진입 점의 응용 프로그램이 인식하게하는 데 사용할 수 있습니다
가져 오기 라이브러리 DLL은 PE 파일의 임포트 디렉토리 (또는 지연로드 임포트의 다른 유사한 위치)에 기록됩니다.
그러나 후자는 실제로 참조 된 모든 함수에 대해 포함 된 코드를 최종 이진 파일에 연결합니다. 이것이 당신이 원하는 것이지만, 링크하려는 라이브러리의 릴리즈가 제공하지 않는 경우 정적 라이브러리를 직접 소스 코드에서 빌드해야 할 수도 있습니다.
그러나 다른 가능성이 있습니다. 즉, 단순히 링커에 대해 잘못된 디렉토리를 전달하여 .lib
파일을 찾을 수 있습니다. 이 경우 정적 라이브러리 대신 가져 오기 라이브러리에 연결해야합니다. 빌드 로그에서 사용 된 경로를 확인하십시오. 그러나 이것은 라이브러리의 배포에 두 유형의 라이브러리가 모두있는 경우에만 적용됩니다.
음 pdcurses.lib와 pdcurses.dll이 같은 디렉토리에 있습니다. 그 디렉토리에 "추가 라이브러리"경로를 설정 했으므로 .lib를 찾으려고합니다. 그리고 "input"필드에 pdcurses.lib를 추가했습니다. 필자는 정적으로 pdcurses를 GCC를 사용하는 다른 응용 프로그램에 연결하는 데 사용했습니다. 문제는 일부 MSVC 구성과 관련된 것으로 보이지만 정확하게 무엇인지는 알 수 없습니다. –
단지'lib.'을 가지고 있기 때문에'.lib'의 타입에 대해서는 아무 것도 말하지 않습니다. 알아내는 쉬운 경험적 방법은 DLL이'.lib '보다 작거나 큰지 여부입니다. 그것이 더 크다면,'.lib'는 단지 임포트 라이브러리 일 가능성이 높습니다. 크기가 작 으면'.lib'가 찾고있는 정적 라이브러리 일 가능성이 높습니다. 빌드 로그의 세부 정보를 질문에 포함 시키면 추가 지원이 가능할 수 있습니다. GCC는 아카이브 ('.a') 나'.so'를 직접 사용하기 때문에 여기서는 비교가되지 않습니다. MSVC에서는 동적 링크를 위해 가져 오기 라이브러리 ('.lib')가 필요합니다. – 0xC0000022L
dll이 경로에 있어야합니다.
이것은 정적 링크와 전혀 관련이 없습니다. –
PDCurses를 사용하려면 경로에 dll을 넣어야합니다. 그 후에 인터페이스 라이브러리에 연결하면 모든 것이 작동합니다. – EvilTeach
pdcurses.lib은 실제로 독립 실행 형 정적 라이브러리가 아니며 DLL 용 가져 오기 라이브러리입니다. DLL이 필요없는 독립 실행 형 정적 라이브러리가 있는지 확인해야합니다. –