2017-12-08 21 views
-1

Visual Studio (2013)에서 "mylib.lib"라는 정적 C++ 라이브러리를 만들었습니다. 그것은 멀티 스레드 (/ MT)이며, "mt"없이 Visual Studio에서 원하는 이름을 지정할 수 있도록 Librarian/General의 "output file"을 "$ (OutDir) $ (TargetName) $ (TargetExt)"로 지정합니다. '/ MT'를 사용했기 때문에 파일 이름 끝에 강제로 붙이십시오.Visual Studio에서 종속성 라이브러리 이름을 사용하도록 강제로 설정하려면 어떻게합니까?

이 프로젝트는 여러 다른 종속성에서도 링크되어있어 응용 프로그램을 사용하기 위해 하나의 거대한 "mylib.lib"파일에 있습니다. 이 다른 라이브러리는 "A.lib", "B.lib"및 "C.lib"입니다. 또한 파일 이름의 끝에 "mt"가 없도록 출력 이름을 지정하여 빌드됩니다.

이제 빌드 할 때 '/ MT'를 사용하는 C++ 응용 프로그램에서 "mylib.lib"을 사용하려고합니다. 응용 프로그램은 해당 라이브러리와 링크하고 그 라이브러리 내의 단일 함수를 호출합니다. 응용 프로그램이 "Amt.lib 'LNK1104"파일을 열 수 없기 때문에 연결에 실패합니다.

응용 프로그램이 "A.lib"에 직접 종속되지 않으며 "mylib.lib"에 이미 종속되어 있으므로 "mylibmt.lib"로 연결하지 마십시오. 한 가지 경우에 "mt"접미어를 적용하는 겉으로보기에 임의의 결정은 혼란 스럽습니다.

여기 Visual Studio의 마음 속에서 무슨 일이 벌어지고 있습니까? 그리고 특정 라이브러리에 "mt"를 추가하지 말라고 말할 수있는 방법이 있습니까?

+0

"이 프로젝트는 여러 다른 종속성에도 연결되어있어 응용 프로그램을 사용하여 하나의 거대한"mylib.lib "파일에 모두 포함됩니다." lib 파일은 다른 lib 파일에 _link_하지 않습니다. – tkausl

+0

@tkausl : [They do] (https://stackoverflow.com/questions/47719975/how-can-i-force-visual-studio-to-use-dependency-library-names-i-want-it-to), 일종의. – MSalters

+0

mylib.lib는 건물을 짓고 꽤 거대합니다. 그래서 그들이 거기에 있다는 것을 확신합니다 ...? 어느 쪽이든, 나는 여전히 이름 끝에 "mt"를 넣지 않아도 될 것입니다. – Bungles

답변

0

이 작업을 수행하는 한 가지 방법은 소비 응용 프로그램에서 "기본 라이브러리 없음"을 설정 한 다음 링커 섹션에 모든 "추가"종속성을 수동으로 추가하는 것입니다. 의존성 트리를 따라 가야하지만 작동하지 않습니다.

쉬운 방법은 링커 입력 아래의 "특정 기본 라이브러리 무시"필드에 원하는 라이브러리를 추가하는 것입니다. 예를 들어 "Amt.lib", "Bmt.lib"및 "Cmt.lib"를 해당 필드에 추가 한 다음 "A.lib", "B.lib"및 "C.lib"를 "Additional Dependencies"필드 (Linker | Input에도 있음)