제가 라이브러리파일 만드는것은 처음이라 헷갈리는 부분이 있습니다.
제가 이쪽으로는 능력이 부족해서 프갤여러분께 질문드립니다.
상황은 이렇습니다.
Visual Studio에서 3가지 프로젝트 project A, project B, project C를 만들었고, 각각 라이브러리 파일을 빌드합니다.
project A : a.h, a.cpp => liba.lib
project B : b.h, b.cpp => libb.lib
project C : c.h, c.cpp => libc.lib
a.h에는 class A {...};
b.h에는 class B {...};
c.h에는 class C { ..., 멤버변수로 A* a; B* b }; 가 들어있고
c.cpp에서는 A와 B의 멤버함수 일부분만을 호출하죠.
여기서 질문이 있는데
1. project C 에서 library input으로 liba.lib과 libb.lib을 넣어주면 libc.lib은 어떤 형태인가요?
1-1. liba.lib과 libb.lib의 내용물이 전혀 들어가지 않는다? 만약 이렇다면, 나중에 class C를 사용하는 프로그램을 만들때 인풋으로 liba.lib, libb.lib libc.lib 세가지를 모두 넣어야 하겠죠?
1-2. liba.lib과 libb.lib의 내용물의 일부분만 들어간다?(c.cpp에서 사용한 A와 B의 멤버함수들만) 만약 이렇다면, 나중에 class C 만을 사용하는 프로그램을 만들때 인풋으로 libc.lib 하나만 넣으면 되겠죠?
1-3. liba.lib과 libb.lib의 내용물이 전부 들어간다?
2. project C 에서 library input으로 아무것도 넣지 않으면 libc.lib은 빌드가 되나요?
빌드가 된다면 libc.lib은 어떤 형태인가요? 인풋이 없어서 liba.lib과 libb.lib의 내용물이 전혀 들어가지 않을걸로 추측하는데... 직접 분석할 능력이 없어서 모르겠네요.
1. 빌드옵션에 따라 다른데, 1-2.
2. 빌드됨. 외부참조선언까지만 있으면. 대신 나중에 실행파일 만들때 에러 툭툭 뱉지.
그러니까 링킹타임에만 실제 정의 내용들이 합쳐지는거. 컴파일 타임과 라이브러리 빌드 타임에는 그냥 외부참조로 예약됨.
늦게 봤네요 답변 감사합니다
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.