2012-10-27 2 views
1

가능한 한 "정적"라이브러리 (.a 확장자 사용)를 사용하는 방법을 파악하려고합니다. 정적 라이브러리를 조사한 이유는 여러 .h 및 .cpp 파일의 코드를 하나의 파일에 넣었 기 때문입니다. 하나의 파일에 다른 프로젝트에서 쉽게 이동할 수 있기 때문입니다.정적 라이브러리의 함수를 사용하는 방법

예를 들어.

double hypotenuse(double, double); 

및 정의가있는 geometry.cpp 파일. libgeo.a 파일을 만들고 다른 프로그램에서 테스트했습니다 (main.cpp, say). 이 프로그램을 다음과 같이 컴파일했습니다.

g++ main.cpp -o test -L. -lgeo 

나는 'hypotenuse' was not declared in this scope 오류가 나타납니다. 이에 대한 명백한 해결책은 geometry.h와 마찬가지로 main.cpp에 double hypotenuse(double, double);이라는 선언을 추가하는 것입니다.하지만 왜 라이브러리에 포함 된 모든 클래스와 함수에 대해이 작업을 수행하려고합니까? main.cpp에 #include "geometry.h"을 쓸 수는 있지만 항상 헤더 파일이 있어야하고 라이브러리를 사용하고자하는 이유는 파일이 유용한 코드와 함께 있어야합니다.

나는 도서관을 가지고있는 이유는 당신이가는 곳마다 다른 파일들을 가져올 필요가 없다고 생각했지만, 모든 것을 다시 선언해야한다면 .a 파일의 요점은 무엇일까요? 필요한 것? 내가 놓친 것이 있습니까? .a 라이브러리는 일반적으로 어떻게 사용됩니까? 헤더 파일 :

위한 무엇

+0

PS : "라이브러리"링크 타임 것입니다. "헤더"는 컴파일 타임입니다. MSVS 또는 Eclipse와 같은 최신 GUI는 때로는 구별을 흐리게하는 경향이 있습니다. 그러나 구별은 매우 현실적이고 매우 중요합니다. "헤더"는 C/C++ 개발의 필수 부분입니다. IMHO ... – paulsm4

답변

1

그것은 당신처럼 필요는 "geometry.h을 ..."소리와 프로그램이 발전하면 그것은 확실히 하나 개 이상의 클래스가됩니다.

PS :

성가신 "익명의 인수를"잃을하십시오

double hypotenuse(double, double); // BAD

double hypotenuse(double a, double b); // BETTER

관련 문제