Pergunta

Eu gostaria de perguntar mais detalhadamente sobre a resposta que eu comecei recentemente aqui (3ª): compilados básico

Se eu escrever em C e MinGW e eu vincular a biblioteca C ++ compilado por VC - será que funciona? Como posso saber com antecedência?

Em outras palavras, se eu sou capaz de criar sem avisos um .exe que links para que o C ++ .dll, e eu sou capaz de correr (apenas correr, nenhum teste adicional) que .exe, que significa que trabalhou? Wont ela core-despejo em algum momento?

Para ser totalmente certo, eu preciso re-compilar o código da biblioteca por mim e a ligação com ele?

Eu entendo que pode haver um problema às vezes com ligando C ++ e código C, mas como saber quando ele funciona e trabalhou?

PS: Sim, serra I Usar bibliotecas compiladas ... Eu apenas pensei que a minha pergunta é um pouco diferente.

Foi útil?

Solução

Se eu escrever em C e MinGW e eu vincular a biblioteca C ++ compilado por VC -? Será que funciona

Depende dos compiladores (e eu não sei MinGW) e no específico C ++ biblioteca.

Razões pelas quais ele pode não ligar, ou pode falhar se ele faz link:

  1. A biblioteca C ++ está exportando classes e métodos C ++, usando "mutilados" nomes , mas de MinGW C ++ desconfiguração do nome pode (eu não sei) ser diferente do VC (e inexistente quando você está programando em C em vez de C ++)

  2. código VC não usa a biblioteca de tempo de execução mesmo C como MinGW, que irá mordê-lo se o API é tal que a memória é alocada na pilha pelo código VC e depois é suposto ser liberado pelo MinGW código.

  3. código de VC não é binário-Comptible com código de MinGW (não utiliza as mesmas convenções de passagem de parâmetros, não implementar exceções da mesma forma)

Por outro lado, algumas razões pelas quais isso pode funcionar:

  1. A biblioteca C ++ é escrito com interface estilo C, por desenvolvedores que pretendia que fosse chamado de um compilador diferente

  2. Mesmo que 1.

  3. Os criadores do compilador MinGW tornou binário-compatível com VC

Como posso saber com antecedência?

Eu não sei. Se você postar os nomes das funções exportadas da DLL, e / ou o arquivo de cabeçalho que declara a sua / API exportados público, que me (ou outra pessoa) dar uma dica muito forte sobre se é exportar C (possivelmente incompatível) ++ métodos -estilo ou exportação (mais-provável-a-ser-Comptible) funções de estilo C.

Caso contrário, você tem uma pergunta em duas etapas:

  1. O que é necessário (por exemplo C em vez de C ++, por exemplo, não assumindo que eles usam a mesma pilha, por exemplo especificando a convenção de passagem de parâmetros) para o código MinGW para invocar código VC?

  2. A sua biblioteca de VC ser escrito com isso em mente?

Alguém que usou ambos os compiladores provavelmente poderia responder à primeira pergunta (eu não usei MinGW). Eu não sei quem poderia responder à segunda; que escreveu essa biblioteca VC?

Outras dicas

Sim, você pode converter MSVC bibliotecas compilados para MinGW sem recompilar.
Você só precisa de algumas ferramentas e a dll. Confira aqui .

Em relação misturando C e C ++ - se você não está preocupado com o tamanho do seu binário, basta usar c ++ compilador para seus projetos C. Desta forma, você não vai estar preocupado com os possíveis problemas com as bibliotecas que você está ligando.

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