2010-06-09 3 views
0

요즘 Visual Studio (C++)에서 예제 코드를 작성하려고했는데 올바른 include 및 lib 디렉토리 (링커 오류가 있음)를 지적했지만 작동하지 않습니다.의존성 연결이 충분하지 않습니까?

프로젝트 설정의 일반 등록 정보 -> 링커 -> 입력 필드에 필요한 .lib 파일을 지정하여 문제를 해결 한 친구에게 물었습니다.

내 질문 :

은 단순히 충분히 lib 디렉토리 파일과 디렉토리를 가리키는 아닌가요? 링커에게 링크 할 lib 파일을 구체적으로 알려줄 필요가 있습니까?

additional dependencies 필드에 .lib 파일을 나열하면 정확히 정적 라이브러리가 exe에 내장되도록 지정합니까? 이것에 대한 대답이 '예'라면, 이것들은 exe 파일에 내장 된 유일한 lib 파일일까요? 왜 이것이 additional이라는 종속성을 갖습니까? 포함 할 lib 파일을 지정할 다른 장소가 있습니까? 나는 이것이 필요한 헤더 파일을 포함함으로써 이루어 졌다고 생각했다.

답변

2

소스 코드에 헤더를 포함하면 해당 헤더의 선언을 컴파일러에서 사용할 수 있습니다. 컴파일러가 사용하는 라이브러리 함수 (상수, 매크로 등)에 대한 선언을 찾을 수 없으면 해당 함수를 참조하는 객체 코드를 생성 할 수 없습니다.

일단 컴파일이 성공하면 심볼이 잔뜩있는 객체 코드를 얻게됩니다. 목적 코드를 유용하게 사용하려면 실제로 이러한 기호를 참조해야합니다. 그것이 링커가 들어오는 곳입니다 - 방금 컴파일 한 코드의 심볼을 사용중인 바이너리 라이브러리의 해당 오브젝트 코드로 해석합니다.

그렇습니다. 링크 된 .lib 파일을 참조 할 필요가 있습니다. #include 지시문을 사용하여 컴파일러에게 참조 할 헤더 파일을 참조하는 방법과 유사합니다. 링커가 심볼을 해석 할 수 없다면 링킹이 실패합니다 (링커 ​​에러라고 생각합니다).

저는 Visual Studio를 실제로 사용하지 않지만 this MSDN article에 따르면 VS는 기본적으로 LIBC.LIB와 다른 라이브러리 전체에 연결됩니다. 기본적으로 연결되어 있지 않은 다른 정적 라이브러리를 사용하는 경우 추가 종속성이 있습니다.

0

맞습니다. 단순히 디렉토리를 가리키면 해당 디렉토리의 .libs가 링크되지 않습니다 (Visual Studio 'lib'폴더의 경우를 고려하십시오. 내 버전에는 60 개의 파일이 있습니다. if if if 그들은 모두 연결되어 있습니다!)

일반적으로 표준 C++ 런타임이 자동으로 연결되기 때문에 "추가"라고합니다. 다양한 #pragma을 사용하면 라이브러리가 자동으로 링크되도록 할 수 있습니다 (이 라이브러리는 부스트 할 라이브러리와 같습니다).