Visual Studio에서 여러 lib를 모아 하나의 static dll 생성.
글쓴이: masa / 작성시간: 목, 2009/06/11 - 2:25오후
안녕하세요.
Visual Studio 2005에서 여러개의 static lib를 이용해 하나의 static dll생성을 어찌 하는지 알고 싶습니다.
현재 솔루션에는 다음과 같은 프로젝트이 있습니다.
fng -> fng.lib 참조( libgsl.lib, libgslcblas.lib)
fng_ir -> fng_ir.lib
fng_credit -> fng_credit.lib
최종적으로 생성될 fng.dll에서는
fng.lib, fng_ir.lib, fng_credit.lib에서 생성된 모든 함수를 포함하는 fng.dll을 생성하고 싶습니다.
그럼.
Forums:
static 라이브러리는
static 라이브러리는 링크 개념입니다. dll하고 좀 다르게 생각을 해야하는데..
dll은 exe하고 비슷한 실행가능한 바이너리입니다. 그리고 외부에서 dll안의
변수나 함수를 사용하고자 한다면 export를 해야하지요.
그런데 static은 컴파일된 c/c++의 obj파일을 하나로 묶어놓은 형태입니다.
즉.. obj들을 zip으로 압축률 하나도 안주고 묶어놓은거하고 거의 비슷합니다.
그렇기 때문에 static의 변수화 함수들은 모두 export되어있는 샘이며 실행 가능한
바이너리가 아니기 때문에 다른 라이브러리를 링크 하는 것도 없습니다.
실제 static을 생성하실 때 프로젝트 세팅에 보시면 링커 항목이 없음을 보실수 있습니다.
대신 라이브러리관리자라고 있습니다.
다시 처음으로 돌아가서 dll은 실행가능하나 바이너리라고 했습니다. 따라서 링커 세팅부분에
추가 종속성을 지정 하는 부분이 있고 여기에 지정된 static라이브러리에서 심볼을 가져와
dll이 실행가능한 바이너리로 생성되는 것을 돕습니다.
따라서 다른 라이브러리에서 필요한 것만 가져와서 링크하지 모든 static 라이브러리의 내용을
링크 하지는 않습니다.
그렇기 때문에 static을 모아서 dll을 만들기는 힘듭니다. 이름이 동적, 정적 이라고 되어있지만
내부적으로 구성되는 방식이 위에서 설명해드린데로 완전 다르기 때문이지요.
여러개의 static을 하나의 static으로 만들수는 있습니다. 위에서 말씀드린데로 각 라이브러리를
모두 풀어 obj파일들을 추출한다음에 그냥 다시 묶으면되니까요.
따라서 여러개의 static을 하나의 dll로 만들고 싶으시다면 원본소스를 전부 하나의 dll 프로젝트에 넣고 전부 export를
걸고 다시 컴파일을 하셔야합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기