#program comment(comment-type[, "commentstring")--라이브러리 링크 문제를 미리 이해

3003 단어 C 언어
#pragma comment(comment-type[, "commentstring")) 이 매크로는 주석을 대상 파일이나 실행 가능한 파일에 배치합니다.
comment-type: 미리 정의된 식별자입니다. 주석의 종류를 지정합니다. compiler, exestr,lib,linker 중 하나일 것입니다.
commentstring:comment-type에 추가 정보를 제공하는 문자열입니다.
 
comment-type의 유형 설명:
1、compiler
  • 컴파일러의 버전이나 이름을 대상 파일에 저장합니다. 이 옵션은 링크에 의해 무시됩니다.
  • 컴파일러의 버전 번호와 이름을 목표 파일에 넣으면 이 주석 기록은 컴파일러에 의해 무시됩니다.
  • 이 기록 형식에commentstring 파라미터를 제공하면 컴파일러가 경고를 보냅니다. 
  • 예: #pragma comment(compiler)
  • 2、exestr
    이후 버전에서는 취소됩니다.
  • commentstring 파라미터를 목표 파일에 넣고 링크할 때 이 문자열은 실행 가능한 파일에 넣습니다.
  • 운영체제가 실행 가능한 파일을 불러올 때 이 매개 변수 문자열은 메모리에 불러오지 않습니다.단, 이 문자열은dumpbin 같은 프로그램에 의해 검색되고 인쇄될 수 있으며, 이 식별자로 버전 번호와 같은 정보를 실행 가능한 파일에 삽입할 수 있습니다.

  • 3、lib
    라이브러리 검색 기록을 대상 파일에 저장합니다. 이 형식은commentstring (라인이 검색할lib의 이름과 경로를 지정합니다) 이 라이브러리의 이름과 Object 파일의 기본 라이브러리 검색 기록 뒤에 있어야 합니다. 링크가 이 라이브러리를 검색하는 것은 명령줄에서 명령을 입력하는 것과 같습니다.원본 파일에 여러 개의 라이브러리 기록을 설정할 수 있습니다. 원본 파일의 순서와 원본 파일의 순서가 같습니다.기본 라이브러리와 추가 라이브러리의 순서가 다를 경우, Z컴파일 스위치를 사용하면 기본 라이브러리가 Object 모듈에 들어가는 것을 방지합니다.
    이것은 라이브러리 파일을 대상 파일에 연결하는 데 매우 자주 사용하는 키입니다.
    자주 사용하는lib 키워드로 라이브러리 파일에 연결할 수 있습니다.예를 들어 #pragma comment(lib, "user32.lib") 이 명령은 user32를lib 라이브러리 파일이 이 프로젝트에 추가되었습니다.
    4、linker
    명령줄에 입력하거나 개발 환경에서 설정하지 않아도 되는 연결 옵션을 지정합니다.
    대상 파일에 링크 옵션을 넣으면 명령줄에서 들어오거나 개발 환경에서 설정된 링크 옵션을 대체할 수 있습니다. 대상을 강제로 포함시키기 위해/include 옵션을 지정할 수 있습니다.
    예: #pragma comment(linker, "/include: my Symbol")
         linker       :
  • /DEFAULTLIB

  • 1),/DEFAULTLIB 옵션은 참조를 확인할 때 LINK에서 검색하는 라이브러리 목록에 library를 추가합니다./DEFAULTLIB 지정된 라이브러리를 사용하여 명령줄에 지정된 라이브러리 다음 및.obj 파일에 지정된 기본 라이브러리가 검색되었습니다.
    2), 모든 기본 라이브러리(/NODEFAULTLIB) 옵션을 무시하고/DEFAULTLIB:library를 다시 씁니다.둘 중 같은 library 이름을 지정하면 라이브러리 무시(/NODEFAULTLIB:library) 옵션은/DEFAULTLIB:library 를 다시 씁니다.
  • /EXPORT

  •  1)、/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
    이 옵션을 사용하면 다른 프로그램에서 이 함수를 호출할 수 있도록 프로그램에서 함수를 내보낼 수 있습니다.데이터를 내보낼 수도 있습니다.일반적으로 DLL에서 내보내기를 정의합니다.entryname은 호출 프로그램이 사용할 함수나 데이터 항목의 이름입니다.ordinal 내보내기 테이블에서 지정한 범위가 1에서 65535까지의 인덱스;ordinal이 지정되어 있지 않으면 LINK에 하나가 할당됩니다.NONAME 키워드는 함수를 entryname 없이 일련 번호로만 내보냅니다. 
  • /INCLUDE

  • 1)、/INCLUDE:symbol
    /INCLUDE 옵션 알림 링크는 기호 테이블에 지정된 기호를 추가합니다.여러 기호를 지정하려면 기호 이름 사이에 쉼표(,), 세미콜론(;)을 입력합니다.또는 공백입니다.명령줄에서 각 기호에/INCLUDE:symbol을 한 번 지정합니다.링크는 기호 정의를 포함하는 대상을 프로그램에 추가해서symbol을 해석합니다.이 기능은 프로그램에 연결되지 않는 라이브러리 대상을 추가하는 데 매우 유용하다.기호를 지정하면/OPT:REF를 통해 기호의 제거가 다시 작성됩니다.
  • /MANIFEstdEPENDENCY
  • /MERGE
  • /SECTION

  • 자주 사용하는 항목: #pragma comment(lib, "*.lib")pragma comment(lib, Ws2 32.lib)는 링크 Ws2 를 나타냅니다.32.lib 이 라이브러리  
    및 프로젝트 설정에 체인 Ws232.lib의 효과는 같지만 이런 방법을 사용하면 다른 사람이 당신의 코드를 사용할 때 프로젝트settings를 설정하지 않아도 됩니다.
     
    참조 기사:
    http://blog.sina.com.cn/s/blog_4a0824490102x16k.html
    http://www.cnitblog.com/ictfly/archive/2011/06/27/74454.html

    좋은 웹페이지 즐겨찾기