Pergunta

Parece que toda a minha vida adulta me atormentou pelo ligante VC ++ reclamando ou bando porque várias bibliotecas não concordam em qual versão da biblioteca de tempo de execução usar. Nunca estou com vontade de dominar esse assunto sombrio. Então, eu apenas tento mexer com isso até que funcione. As mensagens de erro nunca são úteis. Nem a documentação da Microsoft sobre o assunto - pelo menos não para mim.

Às vezes, não encontra funções - porque o uso de nomes não é o que era esperado? Às vezes se recusa a misturar e combinar. Outras vezes, apenas diz, "Link: Warning LNK4098: DefaultLib 'libcmtd' conflita com o uso de outros libs; uso /nodefaultLib: biblioteca" Usar /nodefaultLib não funciona, mas o aviso parece ser benigno. O que diabos é "DefaultLib", afinal? Como o vinculador decide? Nunca vi uma maneira de especificar ao vinculador qual biblioteca de tempo de execução usar, apenas como dizer ao compilador qual biblioteca para criar a função exige.

Existem programas de "Walker de dependência" que podem inspecionar arquivos de objeto para ver em que DLLs eles dependem. Acabei de executar um em um projeto que estou tentando construir, e é uma verdadeira bagunça. Existem sistemas .libs e .dll que desejam versões de tempo de execução conflitantes. Por exemplo, o comctl32.dll deseja msvcrt.dll, mas estou vinculando com msvcrtd.dll. Estou procurando ver se há um comctl32d.dll, mesmo quando digito.

Então, acho que o que estou pedindo é um tutorial sobre como resolver essas coisas. O que você faz e como você faz isso?

Aqui está o que eu acho que sei. Por favor, corrija -me se isso estiver errado.

  1. Os parâmetros são depuração/liberação, multi-thread/thread único e estático/dll. Apenas seis das oito combinações possíveis são cobertas. Não há DLL de thread único, depuração ou lançamento.

  2. As configurações afetam apenas em que a biblioteca de tempo de execução é vinculada (e a convenção de chamada para vincular a ela). Por exemplo, você não precisa usar um tempo de execução baseado em DLL se estiver construindo uma DLL, nem precisar usar uma versão de depuração do tempo de execução ao criar a versão de depuração de um programa, embora pareça ajudar quando um único passando por chamadas do sistema.

Pergunta de bônus: como alguém ou qualquer empresa poderia criar essa bagunça?

Foi útil?

Solução

Isso parece um pouco como tentar encontrar uma resposta para a pergunta errada, e / ou reinventar a roda.PHP fará sua verificação para você quando joga um erro fatal.

Se você quiser olhar assim, seu código realmente já funciona.Você obtém um erro fatal, portanto, a classe pai não existe, portanto, você precisa corrigir seu código.Tendo estabelecido que uma aula pai está faltando, o que mais você vai fazer?Você ainda precisa consertá-lo.

O que eu estou tentando dizer é que, se você conseguiu se livrar do erro fatal, ele não leva a qualquer lugar - seu código ainda está com defeito, e provavelmente cair em algum lugar mais abaixo da linha.Claro que você poderia ecoar 'você tem um problema' para o usuário, mas é isso que o php já faz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top