Pergunta

..., um acompanhamento para este .

A partir das respostas que me foi dada à minha pergunta referenciada Eu aprendi que:

  • diferentes compiladores usam decoração nome diferente, o que torna impossível usar uma biblioteca dinâmica C ++ construído com compilador A em um projeto construído com o compilador B,
  • A biblioteca pode ser construído como estática me salvar incluindo cabeçalho n e arquivos de origem do projeto ou símbolos exportadores. (Ainda não salvará a reconstrução da biblioteca para uso com um compilador diferente.)

Ter um olhar mais atento a SDL à luz do que foi dito, eu percebi, que a sua ligação tem duas camadas: no meu projeto SDL, eu vincular estaticamente contra libSDL.a, que, por sua vez, ligação dinamicamente contra SDL.dll, elminating assim a necessidade de diferentes versões .dll para diferentes compiladores.

A questão é se este é realmente o caso e uma solução viável para o problema, ou estou faltando alguma coisa (eo que)?

Foi útil?

Solução

Eu acho que sua abordagem é certo. Eu colocá-lo desta maneira:

  • Para uma dll para ser utilizável por diferentes compiladores, ele deve conter apenas funções C (eles podem ser compilados utilizando um compilador C ++ usando extern C)
  • Como de costume com dlls, uma biblioteca de importação estática pode ser usado para que as funções na DLL pode ser chamado diretamente, em vez de precisar ser carregado pelo nome
  • Em vez de uma biblioteca de importação regular, você poderia ter uma biblioteca wrapper que envolve as funções da dll C em classes e funções C ++
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top