2009-11-05 2 views
0

정적 라이브러리를 빌드하고이를 사용하는 데 필요한 인터페이스와 클래스를 정의하는 몇 가지 헤더 파일을 사용하여 빌드 된 라이브러리를 전달하여 잘 정의 된 단일 클래스를 노출하려고합니다. 나는 그 일을하고있다. 그러나 내가 당면한 문제는 도서관이 거대하다는 것이다. 그것은 전체 프로젝트의 모든 단일 오브젝트 파일을 가지고 있으며 필요한 것은 서브 세트입니다. 간단한 main.cpp 파일을 만들고 그 단일 클래스를 포함하고 사용하면 나는 사용하고있는 라이브러리의 20 %만큼 큰 출력 파일을 얻습니다. 링커에게 주어진 장소에서 시작하여 실행 가능한 경우와 같은 모든 것을 잘라 내기위한 방법이 있습니까?C++에서 정적 라이브러리 프 i

는 편집 : 나는 Cygwin에서와 리눅스에 GCC를 사용하고 있음을 언급하는 것을 잊었다

답변

0

공유 라이브러리를 만듭니다. 링크 등의 관점에서 실행 파일처럼 작동합니다. 실행 파일에서 언급 한 폐기를 수행해야합니다.

+0

그래, 아마도 가장 좋은 해결책 일 겁니다. 그래도 원하는 심볼 만 내보내는 방법을 알아야합니다. 비교적 똑바로. 감사! –

0

(나뿐만 아니라 비주얼 스튜디오와 협력 솔루션을하고자하지만, 우리는 일반적으로 개발하지만 것은 주로 리눅스에 배포하는 것이 사용) 프로젝트를 분할해야합니다. 라이브러리에 필요한 파일을 가져 와서 lib를 만드는 별도의 프로젝트로 만듭니다.

나머지 프로젝트 (main.cpp 인과 함께)는 lib를 얻기 위해 새 lib 프로젝트를 호출해야합니다. 세부 사항은 도구 및 OS (예 : Visual Studio 또는 make ...)를 관리하는 데 사용하는 도구 및 OS에 따라 다릅니다.)

+0

실행 파일을 빌드 할 때 기대하는 바를 수행한다는 것, 사용되지 않는 클래스를 제거하는 로직이 분명히 있음을 나에게 귀찮게합니다. 노출 될 필요가있는 것에 대한 힌트가 필요한 것처럼 느껴집니다. –

+0

정적 라이브러리는 링커를 사용하지 않고 당신이 말한 모든 객체 파일을 연결합니다. – Mark

0

당신이 사용하고있는 툴체인은 알려주지 않았지만 프로젝트를 말한 이래로 나는 MS 툴체인을 사용하고 있다고 생각합니다.

MS 도구 체인에는 프로젝트의 모든 개체가 정적 라이브러리에 포함됩니다. 당신이 원하는 것은 당신의 단일 수업을 별도의 프로젝트로 분리하는 것입니다. 해당 클래스를 포함하는 수퍼 프로젝트를 계속 가질 수 있으므로 기존 프로젝트를 수정할 필요가 없습니다.

이제 이것을 다음 단계로 가져 가려면 클래스의 각 구성원을 자체 번역 단위 (예 : .cpp 파일)에 넣는 것을 고려해야합니다. 이 방법으로 클래스의 사용자가 클래스의 일부만 필요할 경우 필요한 부분 만 연결하면됩니다.