Visual Studio에서 DLL 파일의 경로를 어떻게 설정합니까?


130

DLL 파일에 의존하는 응용 프로그램을 개발했습니다. 응용 프로그램을 디버깅 하면 응용 프로그램에서 다음과 같이 불평합니다.

"이 응용 프로그램은 xxx.dll을 (를) 찾지 못해 시작하지 못했습니다."

따라서 DLL 파일을 내 .vcproj 파일과 동일한 디렉토리에 복사해야합니다.

어떤 상대 경로 또는 (바람직하지 않은) 절대 경로에서 DLL 파일을 찾도록 프로젝트를 설정하는 방법이 있습니까?

프로젝트 설정에서 포함 및 라이브러리 경로를 설정하는 방법과 유사한 개념.

내 응용 프로그램을 디버깅 할 때 (치는 F5) 위의 오류가 나타납니다.

답변:


196
  1. 프로젝트 속성으로 이동 (Alt + F7)
  2. 디버깅에서 오른쪽을보십시오
  3. 환경 필드가 있습니다.
  4. vcproj 폴더에 상대적인 경로를 추가하십시오 (예 : PATH=%PATH%;$(ProjectDir)\some-framework\lib경로를 추가 하거나 추가하여 .. \ some-framework \ lib)PATH=C:\some-framework\lib;%PATH%
  5. F5 (디버그)를 다시 누르면 작동합니다.

15
환경 필드는 NAME = VALUE 세미콜론으로 구분 된 쌍을 사용합니다. VS 디버거가 DLL에 대한 추가 위치를 검색하도록 PATH 변수에 추가하십시오. PATH = % PATH %; $ (ProjectDir) lib
Brent Faust

1
Release 빌드에도 비슷한 방법이 있습니까?
Narek

$ (LibraryPath) 변수에 dll 경로를 추가하거나 구성 속성-> VC ++ 디렉토리 설정의 라이브러리 디렉토리 아래 목록에 dll 경로를 추가해야했습니다.
포스터 Boondoggle

1
@ SlippD.Thompson 그래, 맞아. 그러나 대신 Alt + p, p를 사용하여 동일한 결과를 얻을 수 있습니다.
Jenix

1
@ SlippD.Thompson Ah, 귀하의 의견을 다시 읽고, 나는 당신이 무슨 뜻인지 오해 한 것 같습니다. 그래, 난 동의. 그러나 적어도 Visual Studio에는 전혀 변경되지 않은 단축키가 있으며 'Alt + p, p'가 그 중 하나입니다. 'Alt + F7'과 함께 거기에 있었으며 이제는 당신이 알고있는 다른 것을 의미합니다. 또한 'Alt + p, p'는 '프로젝트 메뉴> * 속성'을 의미합니다.
Jenix

7

LoadLibrary ()를 호출 할 때 로더가 사용하는 검색 경로는 SetDllDirectory () 함수를 사용하여 변경할 수 있습니다 . 따라서 이것을 호출하고 종속성을로드하기 전에 종속성의 경로를 추가 할 수 있습니다.

DLL 검색 순서도 참조하십시오 .


7

프로젝트 속성-> 참조 경로를 살펴보십시오.

그런 다음 DLL이있는 폴더를 추가하십시오.


4
여러 질문에 동일한 답변을 게시하지 마십시오. 하나의 좋은 답변을 게시 한 다음 투표 / 플래그를 붙여 다른 질문을 중복으로 닫습니다. 질문이 중복되지 않은 경우 질문에 대한 답변을 조정하십시오.
durron597

1
지금까지 가장 좋은 답변 :)
Rathma

2
Visual Studio 2015에서는 C ++ 프로젝트에서 사용할 수없는 것 같습니다. 이 옵션을 지원하는 Visual Studio 버전과 프로젝트 유형의 조합은 무엇입니까?
Filip Bártek

OP의 질문은 C ++에 관한 것이지만이 대답은 C #에 대한 것입니다.
Jenix

C # 및 VS2017와 나를 위해하지 작업나요
mherzog

4

또 다른 가능성은 Working Directory디버깅 옵션 아래에서 해당 DLL이있는 디렉토리가 되도록 설정하는 것 입니다.

편집 : 배치 파일을 사용하여 Visual Studio를 시작하고 배치 파일에서 PATH 변수를 설정하는 것에 대해 언급하려고했습니다. 그런 다음 약간의 검색 을 수행하여이 게시물에서 정확히 똑같은 질문이 제기되지 않았 음을 알 수 있습니다. 대답은 배치 파일 옵션뿐만 아니라 분명히 작업을 수행 할 수있는 프로젝트 설정을 제안합니다 (테스트하지 않았습니다).


만약 2 개의 dll에 의존한다면 각각의 디렉토리에 존재합니까? (위의 질문을 단순화했습니다)
sivabudh

이 솔루션을 하나 이상의 디렉토리에서 사용할 수 있다고 생각하지 않습니다.
Mark Wilkins

3

프로젝트 속성에서 (프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성 버튼을 클릭하십시오) ▶ 구성 속성 ▶ 빌드 이벤트 ▶ 빌드 후 이벤트 ▶ 명령 줄.

명령 행에 하나의 명령을 편집하고 추가하십시오. 예를 들어 botan.dll을 소스 경로에서 프로그램이 실행되는 위치로 복사하십시오.

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

프로젝트 속성


그게 옳은지 모르겠지만 IDE가 그 옵션을 제공하고 유용했습니다. 필요한 모든 파일을 다른 폴더에 복사하여 프로그램을 배포하려는 경우 좋은 옵션이라고 생각합니다. 간단한 주문이지만 효과적입니다. 여기이 질문에는 같은 목표를 달성하기위한 다른 답변이 있습니다. 그러나이 옵션을 사용하고 많은 두통을 피하십시오.
Joma

다른 옵션은 나에게 도움이되지 않았지만이 옵션 만 효과가 없었지만 다른 옵션은 올바른 길로 가야합니다.
rjferguson 2016 년

-1

나는이 질문이 몇 년 전에 대답되었다는 것을 알고 있지만 디버거가 응용 프로그램을 시작하는 위치를 변경 해야하는 사람들을 위해 프로젝트 속성-> 디버깅에서 명령 속성을 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.