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.

Foi útil?

Solução 3

Como resolvi:

  1. vincule com "/FORCE:MULTIPLE /verbose" (que vincula ok) e deixe a saída de lado.
  2. 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.
  3. Isso resultou em duplas:"AAA.lib:XXX já definido em BBB.lib"
  4. 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.

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