2013-12-22 2 views
0

현재 DLL이 필요한 SDL로 C++ 응용 프로그램을 개발 중입니다. 현재는 프로그램과 동일한 폴더에 DLL 만 있습니다. "libs"라는 하위 디렉토리에서 프로그램 검색을 수행하려면 어떻게해야합니까?C++ DLL 위치 검색

+0

왜 지름길을 만들지 않겠습니까? –

+0

왜 DLL을'C : \ WINDOWS \ system32'에 복사하지 않습니까? –

+0

@KerrekSB, PATH에 복사 할 수도 있습니다. – ManuelH

답변

1

로드 시간 연결을 사용하는 경우 DLL 검색 경로에 DLL이 있어야합니다. 여기에 문서화되어 있습니다 : Dynamic-Link Library Search Order. 일반적으로이 경우 DLL 폴더를 PATH 환경 변수에 추가해야합니다. 이제 환경 변수 PATH에 폴더를 추가하는 것이 문제의 중량 솔루션입니다. 당신은 분명히 그렇게하고 싶지 않습니다.

반면에 런타임 연결로 전환하면 DLL의 전체 경로를 LoadLibrary으로 전달할 수 있습니다. GetModuleFileName을 호출하여 실행 파일의 파일 이름을 찾은 다음 디렉토리를 빼고 \libs\MyDll.dll을 추가 할 수 있습니다. 그러나 런타임 연결의 가장 큰 단점은 가져 오는 각 함수에 GetProcAddress을 사용해야한다는 것입니다.

이러한 옵션 중 어느 것도 특히 매력적이지 않습니다. 내 조언은 제안 된 디자인을 변경하는 것입니다. 실행 파일이 필요로하는 모든 DLL을 실행 파일과 동일한 디렉토리에 넣으십시오.

1

Environment Variables에 dll 폴더 경로를 추가하십시오 (경로가 ;으로 구분됨에 유의하십시오).

+0

저는 이것을 보편적 인 설정으로하고 싶습니다. 그래서 파일을 배포했다 할지라도, 프로그램은 여전히 ​​dll을 찾을 곳을 알고있을 것입니다. – tVoss42

+0

@ tVoss42 이것은 최소한 PC의 보편적 인 설정이 될 것입니다. – herohuyongtao