2017-12-01 5 views
0

내가이 같은 프로젝트를 만들 수 cmake를 사용하는 가정 자동로드 FooLib.so. 그러나 Windows에서 Main.exe는 FooLib.dll을 찾을 수 없다는 불평을합니다. courese 중 FooLib.dll을 복사하거나 수동으로 PATH를 지정하면 Main.exe도 정상적으로 작동합니다.CMake 링크 공유 Windows에서 라이브러리 (LIB)하지만 찾을 수없는 DLL

내 질문은이 때문에 lib & dll 워크 플로가 Windows에 있습니까?

Main.exe가 Linux에서와 같이 FooLib 라이브러리의 경로를 기억할 수있는 방법이 있습니까?

+0

[Windows에서 DLL 검색] 가능한 복제본 (https://stackoverflow.com/questions/2463243/dll-search-on-windows) – Tsyvarev

답변

0

실행 파일을 정적 또는 동적으로 링크하는 경우 해당 dll은 exe와 동일한 폴더에 있어야합니다. 이것은 Windows 응용 프로그램의 표준 디자인입니다. 주된 이유는 dll을 로딩하는 동안 export 된 함수의 참조를 담고있는 exe (lib에 의해 제공됨)가 dll 내부에있는 이러한 함수의 구현을 호출하기 때문입니다.

dll은 일반적으로 C : \ Program 파일 또는 c : \ windows 폴더에있는 system32 폴더에 넣을 수 있습니다. 이러한 유형은 32/64bit 등의 OS 유형에 따라 달라지며 시스템 환경 경로/변수로 정의됩니다.

항상 exe 거주 경로와 위에서 언급 한 경로에 우선 순위가 부여됩니다. exe가 해당 DLL의 기능을로드 할 수 있기 때문에 dll의 중복 파일이 system32에 없는지 확인하십시오.

+0

감사하지만 유용하지는 않습니다. 나는 네가 한 말을 이미 알고있다. 나는 수동으로 lib 검색 경로를 추가 할 필요가없는 자동 방법이 있는지 묻습니다. 아마도 일부 cmake 함수 나 msvc 기능이 도움이 될 수 있습니다. – ZenWu

+0

Windows/다른 곳에서는 system32 파일 경로를 추가 할 필요가 없습니다. 기본적으로 시스템에 의해 추가됩니다. 시스템 환경 변수 목록을 확인할 수 있습니다. % SystemRoot % \ system32 경로를 볼 수 있습니다. 하지만이 폴더에 dll을 넣어야합니다. –