C 런타임 라이브러리 란 무엇입니까?
실제로 C 런타임 라이브러리 란 무엇이며 어떤 용도로 사용됩니까? 검색, 악마처럼 인터넷 검색을했지만 Microsoft보다 더 좋은 점은 없습니다. "Microsoft 런타임 라이브러리는 Microsoft Windows 운영 체제를위한 프로그래밍 루틴을 제공합니다.이 루틴은 제공하지 않는 많은 일반적인 프로그래밍 작업을 자동화합니다. "C 및 C ++ 언어."
좋아, 나는 그것을 얻지 만, 예를 들어, 무엇에 libcmt.lib
있습니까? 무엇을합니까? C 표준 라이브러리는 C 컴파일러의 일부라고 생각했습니다. 그렇다면 libcmt.lib
Windows의 C 표준 라이브러리 함수 구현이 win32에서 작동합니까?
예, libcmt는 Microsoft 컴파일러와 함께 제공되는 C 표준 라이브러리의 구현입니다 (여러 중 하나). 이 라이브러리는 단일 스레드 (항상 정적으로 링크 됨), 다중 스레드 정적 링크 및 다중 스레드 동적 링크 (컴파일러 버전에 따라 다름 ) 의 세 가지 기본 유형 라이브러리의 "디버그"및 "릴리스"버전을 모두 제공합니다. 사용 중 일부는 존재하지 않을 수 있습니다).
따라서 "libcmt"라는 이름에서 "libc"는 C 라이브러리의 전통적인 이름입니다. "mt"는 "멀티 스레드"를 의미합니다. "디버그"버전의 끝에 "d"가 추가되어 "libcmtd"가 제공됩니다.
어떤 기능이 포함되어 있는지에 따라 C 표준 (7 부, 관리가 필요한 경우)은 적합한 (호스트 된) 구현이 제공해야하는 기능 세트를 정의합니다. 대부분의 공급 업체 (Microsoft 포함)는 다양한 다른 기능을 자체적으로 추가합니다 (호환성을 위해 표준 기능이 해결하지 않는 기능을 제공하는 등). 대부분의 경우 컴파일러에서 사용하는 상당히 많은 "내부"기능도 포함합니다 그러나 일반적으로 최종 사용자가 아닙니다.
"libcmt"(예제를 사용하기 위해)의 전체 기능 목록을 얻으려면 Visual Studio 명령 프롬프트 중 하나 (일반적으로 "Visual Studio Tools"에서)를 열고 라이브러리가있는 디렉토리로 전환하십시오. 설치하고 다음과 같이 입력 하면 해당 라이브러리에있는 모든 객체 파일의 이름이 lib -list libcmt.lib
( long ) 목록으로 생성됩니다 . 그것들이 항상 함수의 이름과 직접적 으로 일치하는 것은 아니지만 일반적으로 아이디어를 줄 것입니다. 특정 객체 파일을보고 싶다면, lib -extract
해당 객체 파일 중 하나를 추출한 다음`dumpbin / symbols "를 사용하여 특정 객체 파일에 어떤 기능이 있는지 확인하십시오.
처음에는 런타임 라이브러리가 무엇인지 이해해야합니다. "Microsoft C Runtime Library"가 무엇을 의미하는지 생각해보십시오.
참조 : http://en.wikipedia.org/wiki/Runtime_library
나는 기사가 업데이트 될 수 있기 때문에 대부분의 기사를 여기에 게시했습니다.
컴퓨터 프로그램의 소스 코드가 컴파일러에 의해 각각의 대상 언어로 번역 될 때, 프로그램의 각 명령과 내장 함수에 대한 모든 호출로 인해 내부 생성이 발생하면 프로그램 코드가 크게 확대됩니다 매번 대상 언어로 된 해당 프로그램 코드의 전체 대신 컴파일러는 종종 응용 프로그램 프로그래머가 액세스 할 수없는 런타임 라이브러리의 컴파일러 특정 보조 기능을 사용합니다. 컴파일러 제조업체에 따라 런타임 라이브러리는 때때로 해당 컴파일러의 표준 라이브러리를 포함하거나 포함 할 수도 있습니다.
또한 런타임시에만 수행 할 수있는 (또는보다 효율적이거나 정확한) 일부 기능 (예 : 일부 논리 오류, 배열 범위 검사, 동적 유형 검사, 예외 처리 및 가능한 디버깅 기능)이 런타임 라이브러리에서 구현됩니다. 이러한 이유로 복잡한 컴파일 타임 확인 및 시험판 테스트에도 불구하고 실제 데이터가있는 "실시간"환경에서 프로그램을 테스트 할 때까지 일부 프로그래밍 버그가 발견되지 않습니다. 이 경우 최종 사용자에게 런타임 오류 메시지가 표시 될 수 있습니다.
일반적으로 런타임 라이브러리는 운영 체제에 액세스하여 많은 기능을 실현합니다. 많은 프로그래밍 언어에는 내장 함수가있어 컴파일러에서 반드시 구현할 필요는 없지만 런타임 라이브러리에서 구현할 수 있습니다. 따라서 런타임 라이브러리와 표준 라이브러리의 경계는 컴파일러 제조업체에 달려 있습니다. 따라서 런타임 라이브러리는 항상 컴파일러 및 플랫폼마다 다릅니다.
런타임 라이브러리의 개념을 응용 프로그램 프로그래머가 작성하거나 타사 또는 동적 라이브러리에서 제공하는 것과 같은 일반 프로그램 라이브러리와 혼동해서는 안됩니다. 즉, 런타임시 링크 된 프로그램 라이브러리를 의미합니다. 예를 들어 프로그래밍 언어 C에는 최소 런타임 라이브러리 (일반적으로 crt0이라고 함) 만 필요하지만 각 구현에서 제공해야하는 큰 표준 라이브러리 (C 표준 라이브러리라고 함)를 정의합니다.
방금이 질문을하고 몇 시간 동안 뇌를 아프게했습니다. 여전히 현실적으로 지적한 것은 아무것도 찾지 못했습니다. 어떤 주제에 무언가를 쓰는 사람은 실제로 "교사"를 할 수 없습니다. 누군가에게 가르치고 싶다면, 사람들이 이해하는 가장 기본적인 언어를 사용하므로 주제를 다룰 때 다른 주제에 신경 쓸 필요가 없습니다. 그래서 나는이 모든 혼란에 잘 맞는 것처럼 스스로 결론을 내 렸습니다.
프로그래밍 언어 C에서 모든 프로그램은 main () 함수로 시작합니다. 다른 언어는 프로그램이 시작되는 다른 기능을 정의 할 수 있습니다. 그러나 프로세서는 main ()을 모른다. 프로세서는 "0"과 "1"의 조합으로 표시되는 사전 정의 된 명령 만 알고 있습니다.
기본 운영 체제 (Microsoft Windows, Linux, MacOS, ..)가없는 마이크로 프로세서 프로그래밍에서 반복 및 점프 (루프, 함수 호출)하는 ProgrammCounter (PC)를 설정하여 프로세서가 시작할 위치를 명시 적으로 알려야합니다. 프로세서에 알려진 명령 RAM의 크기를 알아야합니다. 프로그램 스택의 위치 (로컬 변수)를 설정해야하며 힙의 위치 (동적 변수)와 전역 변수의 위치 (즉, SSA라고합니다) RAM 내에서). 단일 프로세서는 한 번에 하나의 프로그램 만 실행할 수 있습니다.
운영 체제가 시작됩니다. 운영 체제 자체는 프로세서에서 실행되는 프로그램입니다. 사용자 지정 코드를 실행할 수있는 프로그램입니다. RAM에로드 된 프로그램의 실행 코드 사이를 전환하여 한 번에 여러 프로그램을 실행합니다. 그러나 운영 체제는 프로그램이며 각 프로그램은 다르게 작성됩니다. 사용자 정의 프로그램의 코드를 RAM에 넣는 것만으로는 실행되지 않으며 운영 체제는이를 알지 못합니다. 프로그램을 등록하는 운영 체제에서 함수를 호출하고 프로그램에 필요한 메모리 양, 프로그램의 진입 점이있는 위치 (C의 경우 main () 함수)를 운영 체제에 알려야합니다. 이것이 내가 생각하는 것은 RuntimeLibrary 내에 있으며 각 운영 체제마다 특별한 라이브러리가 필요한 이유를 설명합니다.
RUNTIMELibrary라고하더라도 .dll 파일이 런타임에 동적으로 연결되지 않는 이유도 설명합니다. RuntimeLibrary는 정적으로 링크되어야하며 프로그램 시작시 필요합니다. RuntimeLibrary는 런타임에 사용자 정의 프로그램을 다른 프로그램 (운영 체제)에 삽입 / 연결했습니다. 이 현실은 뇌의 일부를 유발합니다.
결론 : RUNTIMELibrary는 이름 지정에 실패합니다. 초기에는 .dll (런타임에 링크)이 없었을 수 있으며 차이를 이해하는 문제는 존재하지 않았습니다. 그러나 이것이 사실이더라도 이름은 잘못 선택되었습니다.
RuntimeLibrary의 더 나은 이름은 StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary 일 수 있습니다.
수정 / 확장 응원을 위해 내가 올바르게 이해했으면 좋겠다.
C는 언어이며 그 정의에 따라 사용 가능한 기능이 필요하지 않습니다. IO, 수학 루틴 등이 없습니다. 일반적으로 실행 파일에 링크 할 수있는 루틴 세트가 있지만이 를 사용할 필요 는 없습니다 . 그러나 이것은 대부분의 링커가 더 이상 C 런타임 라이브러리에 링크하도록 요청하지 않는 일반적인 작업입니다.
예를 들어 임베디드 시스템으로 작업 할 때 malloc을 사용하는 것은 실용적이지 않을 수 있습니다. 예전에는 PostScript를 프린터에 임베드하는 작업을했으며 임베디드 시스템에서 훨씬 더 만족스러운 자체 런타임 라이브러리를 가지고 있었기 때문에 "표준"을 신경 쓰지 않았습니다.
The runtime library is that library that is automatically compiled in for any C program you run. The version of the library you would use depends on your compiler, platform, debugging options, and multithreading options.
A good description of the different choices for runtime libraries: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
It includes those functions you don't normally think of as needing a library to call:
- malloc
- enum, struct
- abs, min
- assert
Microsoft has a nice list of their runtime library functions:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
The exact list of functions would vary depending on compiler, so for iOS you would get other functions like dispatch_async() or NSLog().
If you use a tool like Dependency Walker on an executable compiled from C or C++ , you will see that one of the the DLLs it is dependent on is MSVCRT.DLL. This is the Microsoft C Runtime Library. If you further examine MSVCRT.DLL with DW, you will see that this is where all the functions like printf(), puts(0, gets(), atoi() etc. live.
i think Microsoft's definition really mean:
The Microsoft implementation of standard C run-time library provides...
There are three forms of the C Run-time library provided with the Win32 SDK:
* LIBC.LIB is a statically linked library for single-threaded programs.
* LIBCMT.LIB is a statically linked library that supports multithreaded programs.
* CRTDLL.LIB is an import library for CRTDLL.DLL that also supports multithreaded programs. CRTDLL.DLL itself is part of Windows NT.
Microsoft Visual C++ 32-bit edition contains these three forms as well, however, the CRT in a DLL is named MSVCRT.LIB. The DLL is redistributable. Its name depends on the version of VC++ (ie MSVCRT10.DLL or MSVCRT20.DLL). Note however, that MSVCRT10.DLL is not supported on Win32s, while CRTDLL.LIB is supported on Win32s. MSVCRT20.DLL comes in two versions: one for Windows NT and the other for Win32s.
see: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
참고URL : https://stackoverflow.com/questions/2766233/what-is-the-c-runtime-library
'IT' 카테고리의 다른 글
Windows에서 가장 빠른 화면 캡처 방법 (0) | 2020.06.14 |
---|---|
펄프 + 웹팩 또는 그냥 웹팩? (0) | 2020.06.14 |
Double.MIN_VALUE가 음수가 아닌 이유 (0) | 2020.06.14 |
당김 용 후크가 있습니까? (0) | 2020.06.14 |
UnicodeEncodeError : 'charmap'코덱이 인코딩 할 수 없습니다- (0) | 2020.06.14 |