A quais bibliotecas preciso vincular meu aplicativo de modo misto?
-
08-06-2019 - |
Pergunta
Estou integrando o suporte .NET em nosso aplicativo C++.
É um aplicativo MFC antigo, com 1 arquivo extra compilado com a opção "/clr" que faz referência a um CWinFormsControl.
Não tenho permissão para remover o sinalizador do vinculador "/NODEFAULTLIB".
(Temos nosso próprio sistema de gerenciamento de compilação, não o do Visual Studio.)
Isso significa que preciso especificar todas as bibliotecas necessárias:Tempo de execução VC e MFC.
Outras opções do compilador incluem "/MD"
Ao lado disso:Não consigo usar o sinalizador do vinculador "/FORCE:MULTIPLE" e apenas adicionar tudo:
Estou procurando um conjunto de bibliotecas não sobrepostas.
Solução 3
Como resolvi:
- vincule com "/FORCE:MULTIPLE /verbose" (que vincula ok) e deixe a saída de lado.
- vincule com "/NODEFAULTIB /verbose" e rastreie todas as questões não resolvidas na saída da etapa anterior e adicione as bibliotecas 1 por 1.
- Isso resultou em duplas:"AAA.lib:XXX já definido em BBB.lib"
- Então finalmente entendi:Unidades gerenciadas e não gerenciadas recompiladas com /MD e link para (entre outras):mscoree.lib msvcmrt.lib mfcm80d.lib
Misturar /MT (não gerenciado) e /MD (gerenciado) acabou sendo uma má ideia:são necessárias bibliotecas diferentes (sobrepostas).
@ajryan:Dependcy Walker apenas me diz quais DLLs são usadas, não a quais bibliotecas estão vinculadas durante a vinculação.(por exemplo.msvcmrt.lib?) Eu acho.
Obrigado pelas respostas!
janeiro
Outras dicas
No mínimo:
mscoree.lib msvcrt.lib mfc90.lib (ajuste a versão adequadamente)
E repita a partir daí.
Use o AppWizard para criar um aplicativo MFC básico em seu estilo (SDI / MDI / dialog) e, em seguida, coloque em suas dependências.