Sim, libcmt é (uma das várias) implementações da biblioteca padrão C fornecida com o compilador da Microsoft. Eles fornecem versões "debug" e "release" de três tipos básicos de bibliotecas: thread único (sempre vinculado estaticamente), vinculado estaticamente multithread e vinculado dinamicamente multi-thread (embora, dependendo da versão do compilador que você está algumas delas podem não estar presentes).
Portanto, no nome "libcmt", "libc" é o nome (mais ou menos) tradicional da biblioteca C. O "mt" significa "multiencadeado". Uma versão "debug" teria um "d" adicionado ao final, fornecendo "libcmtd".
No que diz respeito às funções que ele inclui, o padrão C (parte 7, se você se importa) define um conjunto de funções que uma implementação (hospedada) em conformidade deve fornecer. A maioria dos fornecedores (incluindo a Microsoft) adiciona várias outras funções (por compatibilidade, para fornecer recursos que as funções padrão não abordam etc.) Na maioria dos casos, também conterá algumas funções "internas" usadas pelo compilador mas não normalmente pelo usuário final.
Se você deseja obter uma lista completa das funções em "libcmt" (para usar seu exemplo), você pode abrir um dos prompts de comando do Visual Studio (normalmente em "Ferramentas do Visual Studio"), alterne para o diretório em que suas bibliotecas estavam instalado e digite algo como: lib -list libcmt.lib
e gerará uma lista ( longa ) dos nomes de todos os arquivos de objeto nessa biblioteca. Elas nem sempre correspondem diretamente aos nomes das funções, mas geralmente dão uma idéia. Se você deseja examinar um arquivo de objeto específico, pode usar lib -extract
para extrair um desses arquivos de objeto e depois dumpbin /symbols <object file name>
encontrar quais funções estão nesse arquivo de objeto específico.
strcpy
função da biblioteca padrão C, por exemplo, teria sua implementação na biblioteca de tempo de execução ou apenas seu código em arquivos .c normais?A princípio, devemos entender o que é uma biblioteca de tempo de execução; e pense no que isso poderia significar por "Microsoft C Runtime Library".
consulte: http://en.wikipedia.org/wiki/Runtime_library
Publiquei a maior parte do artigo aqui, pois ele pode ser atualizado.
fonte
Eu mesmo perguntei isso e estava machucando meu cérebro por algumas horas. Ainda não encontrou nada que realmente faça sentido. Todo mundo que escreve algo em um tópico não é capaz de realmente "ensinar". Se você deseja ensinar alguém, use o idioma mais básico que uma pessoa entende, para que ele não precise se preocupar com outros tópicos ao lidar com um tópico. Então, eu cheguei a uma conclusão que parece se encaixar bem em todo esse caos.
Na linguagem de programação C, todo programa começa com a função main (). Outros idiomas podem definir outras funções onde o programa é iniciado. Mas um processador não conhece main (). Um processador conhece apenas comandos predefinidos, representados por combinações de "0" e "1".
Na programação do microprocessador, sem um sistema operacional subjacente (Microsoft Windows, Linux, MacOS, etc.), é necessário informar explicitamente ao processador por onde começar, definindo o ProgrammCounter (PC) que itera e salta (loops, chamadas de função) dentro os comandos conhecidos pelo processador. Você precisa saber o tamanho da RAM, definir a posição da pilha de programas (variáveis locais), bem como a posição da pilha (variáveis dinâmicas) e a localização das variáveis globais (por exemplo, SSA) ?) dentro da RAM. Um único processador pode executar apenas um programa por vez.
É aí que o sistema operacional entra. O próprio sistema operacional é um programa executado no processador. Um programa que permite a execução de código personalizado. Executa vários programas por vez, alternando entre os códigos de execução dos programas (que são carregados na RAM). Mas o sistema operacional É UM PROGRAMA, cada programa é escrito de maneira diferente. Simplesmente colocar o código do seu programa personalizado na RAM não o executará, o sistema operacional não o saberá. Você precisa chamar funções no sistema operacional que registra seu programa, informar ao sistema operacional quanta memória o programa precisa, onde está localizado o ponto de entrada no programa (a função main () no caso de C). E é isso que eu localizo na RuntimeLibrary e explica por que você precisa de uma biblioteca especial para cada sistema operacional,
Isso também explica por que NÃO está vinculado dinamicamente em tempo de execução como arquivos .dll, mesmo que seja chamado RUNTIMELibrary. A RuntimeLibrary precisa estar vinculada estaticamente, porque é necessária na inicialização do seu programa. A RuntimeLibrary injeta / conecta seu programa personalizado em / para outro programa (o sistema operacional) em RUNTIME. Isso realmente causa alguns problemas cerebrais ...
Conclusão: RUNTIMELibrary é uma falha na nomeação. Pode ser que não tenha existido .dll (vinculação em tempo de execução) nos primeiros tempos e a questão de entender a diferença simplesmente não existia. Mas mesmo que isso seja verdade, o nome é mal escolhido.
Os nomes melhores para a RuntimeLibrary podem ser: StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary
espero que eu tenha acertado, para aplausos de correção / expansão.
fonte
C é uma linguagem e, em sua definição, não precisa haver nenhuma função disponível para você. Sem E / S, sem rotinas matemáticas e assim por diante. Por convenção, há um conjunto de rotinas disponíveis para você vincular ao seu executável, mas você não precisa usá-las. Isso é, no entanto, uma coisa tão comum a ser feita que a maioria dos vinculadores não pede mais que você vincule às bibliotecas de tempo de execução C
Há momentos em que você não os deseja - por exemplo, ao trabalhar com sistemas embarcados, pode ser impraticável ter malloc, por exemplo. Eu trabalhava na incorporação de PostScript em impressoras e tínhamos nosso próprio conjunto de bibliotecas de tempo de execução que eram muito mais felizes em sistemas embarcados, por isso não nos incomodamos com o "padrão".
fonte
A biblioteca de tempo de execução é aquela que é compilada automaticamente para qualquer programa em C que você executa. A versão da biblioteca que você usaria depende do seu compilador, plataforma, opções de depuração e opções de multithreading.
Uma boa descrição das diferentes opções para bibliotecas de tempo de execução: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
Inclui as funções que você normalmente não considera necessárias para chamar uma biblioteca:
A Microsoft possui uma boa lista de funções da biblioteca de tempo de execução:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
A lista exata de funções varia de acordo com o compilador, portanto, para iOS, você obteria outras funções como dispatch_async () ou NSLog ().
fonte
Se você usar uma ferramenta como o Dependency Walker em um executável compilado em C ou C ++, verá que uma das DLLs das quais depende é MSVCRT.DLL. Esta é a biblioteca de tempo de execução do Microsoft C. Se você examinar ainda mais o MSVCRT.DLL com o DW, verá que é aqui que todas as funções como printf (), puts (0, gets (), atoi () etc. ficam ativas.
fonte
Eu acho que a definição da Microsoft realmente significa:
fonte
Existem três formas da biblioteca de tempo de execução C fornecida com o SDK do Win32:
A edição de 32 bits do Microsoft Visual C ++ também contém esses três formulários; no entanto, o CRT em uma DLL é chamado MSVCRT.LIB. A DLL é redistribuível. Seu nome depende da versão do VC ++ (ou seja, MSVCRT10.DLL ou MSVCRT20.DLL). Observe no entanto, que o MSVCRT10.DLL não é suportado no Win32s, enquanto o CRTDLL.LIB é suportado no Win32s. MSVCRT20.DLL vem em duas versões: uma para Windows NT e outra para Win32s.
consulte: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
fonte