Pergunta

É possível que o gcc para ligar uma biblioteca que foi criado com o Visual C++?Se afirmativo, há conflitos/problemas que possam surgir a partir de fazê-lo?

Foi útil?

Solução

Alguns dos comentários aqui as respostas são um pouco demasiado generalistic.

Enquanto não, no caso específico mencionado gcc binários não vínculo com VC++ library (AFAIK).O real meios de articulação código/bibliotecas é uma questão da ABI padrão a ser utilizado.

Cada vez mais comum no mundo incorporado é o EABI (ou BRAÇO ABI) padrão (baseado no trabalho feito durante Itanium desenvolvimento http://www.codesourcery.com/cxx-abi/).Se os compiladores EABI compatível com o que eles podem produzir arquivos executáveis e bibliotecas que vai trabalhar uns com os outros.Um exemplo de várias ferramentas de trabalho em conjunto é o BRAÇO do RVCT compilador que produz binários que vai trabalhar com o GCC BRAÇO ABI binários.

(O código sourcery link está desativado no momento, mas pode ser em cache do google)

Outras dicas

Eu acho que não.Geralmente c++ compiladores têm bastante diferentes métodos de nome-desconfiguração o que significa que o vinculadores não vai conseguir localizar os símbolos corretos.Isso é uma coisa boa, pelo caminho, porque compiladores de C++ são permitidos pela norma ter muito maiores níveis de incompatibilidade que apenas este que fará com que o programa falha, morrer, comer cachorros e mancha de tinta nas paredes.

De costume esquemas para contornar este geralmente envolvem independente de linguagem de técnicas como COM ou CORBA.Um simples santificados método é usar C "wrappers" em torno de seu código C++.

Não é possível.Geralmente não é possível para bibliotecas de ligação produzidos por diferentes versões do mesmo compilador.

Não.Puro e simples :-)

Sim, se você fizer uma ligação dinâmica e tornar a interface c-estilo.lib.exe vai gerar bibliotecas de importação que são compatíveis com o gcc toolchain.

Que vai resolver seus problemas de vinculação.No entanto, que é apenas o início do problema.

Seus problemas maiores serão as coisas como exceções, e a alocação de memória.

  • Você deve garantir que nenhuma exceção cruz do VC++ para o gcc código, não há nenhuma garantia de compatibilidade.
  • Cada objeto do VC++ library vai precisar para viver em pilha, porque:
  • Não misture gcc novo/eliminar com qualquer coisa de VC++, coisas ruins vão acontecer.Isto vai para a construção do objeto na pilha.No entanto, se você fizer uma interface como create_some_obj()/delete_some_obj() você acaba não usando o gcc novo para a construção de VC++ objetos.Talvez fazer um pequeno processador de objeto que manipula a construção e a destruição.Desta forma, preserva-RAII, mas ainda uso o c-interface para a verdadeira interface.
  • Convenção de chamada deve ser correta.No VC++ há cdecl e stdcall.Se o gcc tentei chamar uma função importado com o errado chamar tipo, coisas ruins vão acontecer.

A linha inferior é manter uma interface simples que é compatível com ANSI C, e você deve ser fino.O fato de que o louco C++ passa por trás está tudo bem, contanto que ele está contido.

Ah, e certifique-se de que todo o código é reentrante, ou você corre o risco de abrir um todo noether, pode-o-vermes.

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