Visual Studio에서 여러 lib를 모아 하나의 static dll 생성.

masa의 이미지


안녕하세요.

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을 생성하고 싶습니다.

그럼.

chadr의 이미지

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.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.