정적 라이브러리 C ++를 연결하는 데 어려움이 있습니다
문제
vc ++를 설정하여 코드를 .exe 대신 .lib 파일로 컴파일하는 방법을 알아 냈지만 다른 .obj 파일과 함께 링크하기 위해 lib를 가져 오는 데 어려움이 있습니다.
라이브러리 및 응용 프로그램 폴더가 설정되는 방법은 다음과 같습니다. (이것이 옳은지 잘 모르겠습니다)
AppFolder
App.sln
App.ncb
*.h
*.cpp
Debug
*.obj
App.exe
그리고 하드 드라이브의 다른 곳 ...
LibraryFolder
lib
Library.lib
include
LibrarySolutionFolder
Library.sln
Library.ncb
*.h
*.cpp
Debug
*.obj
Library.lib
내 앱의 CPP 파일에서 라이브러리 *.H 파일을 #IN을 포함하고 있으며 모든 것이 정상적으로 컴파일됩니다. 링크 할 때 검색중인 모든 .lib 파일의 목록을 가져오고 Library.lib는 VC ++ 디렉토리에 나열되어 있더라도 거기에 없습니다. 이것을 링크 할 수있는 방법은 무엇입니까? (그리고 라이브러리 폴더를 올바르게 구조화하고 있습니까?)
해결책
프로젝트 속성에서 :
구성 속성 -> 링커 -> 입력 -> 추가 종속성
거기에 추가하십시오.
또는 라이브러리의 .H 파일에서 다음을 추가하십시오.
#pragma comment(lib, "Library")
이것은 당신을 위해 자동으로 할 것입니다.
다른 팁
VC ++ 디렉토리는 링크 중에 검색 할 디렉토리 위치 목록입니다. 연결해야 할 라이브러리 목록이 아닙니다.
lib 파일을 다음에 추가해야합니다 추가 종속성 의장 프로젝트 링커 설정.
라이브러리와 연결하려면 다음 중 하나를 사용할 수 있습니다.
- Project-> Properties ...-> 링커, 입력-> 추가 종속성에 나열하십시오 (VC ++ 디렉토리 만 .lib 이름만으로 전체 경로 만 사용할 수 있습니다),
- 라이브러리 프로젝트를 앱에 추가하십시오. 솔루션 (솔루션에서 마우스 오른쪽 버튼을 클릭하십시오 -> 추가 -> 기존 프로젝트 ...)을 사용한 다음 프로젝트 -> 프로젝트 종속성을 사용한 다음 라이브러리 프로젝트를 확인하십시오 (드롭 다운에서 응용 프로그램 프로젝트가 선택되었는지 확인). VC ++는 앱을 구축하기 전에 변경된 경우 라이브러리를 재건하므로 두 프로젝트를 편집하는 경우 가장 좋은 방법 일 것입니다.
VC ++ 만 사용할 것입니다.
#pragma comment(lib,"C:\\path\\to\\library.lib")`
(감사합니다 @nils)
NB : 도서관 솔루션 폴더가 '포함'디렉토리 안에있는 것은 매우 이상해 보입니다. #include
D 파일).
명령 줄에서 :
cl /ehsc {objfiles}+ /link /libpath : libraryfolder library.lib
여기서 {objfiles}+는 하나 이상의 객체 또는 CPP 파일을 의미합니다.
Header-File을 포함하는 경우 VC는 단순히 라이브러리를 연결하지 않습니다.
라이브러리를 사용하려면 링커에 알려야합니다. 정당한 이유 : Alredy는 라이브러리 폴더에 수천 개의 libs를 가지고 있습니다. MSVC가 프로그램을 연결할 때마다 모든 것을 검색해야한다면 메가 바이트의 데이터 헌드 렛을 wade해야합니다.
꽤 오랜 시간이 걸리므로 기본적으로 수행되지 않습니다.
VC의 경우 소스 내부의 링커에 힌트를 줄 수도 있습니다. 그렇게하려면 소스 코드 어딘가에 다음 줄을 추가합니다 (LIB의 헤더는 좋은 장소 일 수 있습니다).
#pragma comment(lib,"c:\\path_to_library\\libname.lib")
이는 플랫폼 Independet이 아니라 MSVC를 사용하여 프로젝트에 자동으로 LIB를 연결하는 가장 편리한 방법입니다.
또 다른 방법은 단순히 프로젝트 설정에 링커를 추가하는 것입니다. 관련 정보는 프로젝트의 링커 설정을 찾을 수 있습니다. 릴리스 및 디버그 구성에 LIB를 추가하는 것을 잊지 마십시오.