Pergunta

Estou trabalhando em um projeto 100% C para o qual a porta do Windows é compilada usando o Visual Studio 2008 Express Edition. Meu projeto usa algumas bibliotecas Linux que eu consegui compilar estaticamente usando o Minggw.

Eu gostaria de saber se é seguro vincular meu projeto a essas bibliotecas e quais eram os possíveis problemas que eu poderia encontrar.

Eu poderia compilar as bibliotecas que estou usando com o Visual Studio, mas isso seria um bom trabalho, pois elas são baseadas no AutoConf e não fornecem nenhum arquivo de projeto.

Eu já li isto, isto, isto e isto.

Foi útil?

Solução

É a parte "compilada estaticamente" que me preocupou. Se as bibliotecas foram compiladas em DLLs, há uma boa chance de que ela funcione, mas como você está vinculando estaticamente, o compilador Mingw terá feito certas suposições que são verdadeiras em relação à sua biblioteca de tempo de execução, mas podem ou não ser verdadeiras para a biblioteca de tempo de execução do MSVC. Dado que você está pedindo ao código compilado com um compilador para vincular o RTL de outro compilador, há um potencial para o caos lá.

Uma vantagem que você tem é que você está lidando com C aqui e não o C ++ - com uma biblioteca C ++, você não teria uma chance de esse trabalho, em C, poderia. Eu teria muito cuidado para garantir que o alinhamento da estrutura seja o mesmo nos compiladores e apenas experimente. Se o vinculador reclamar da falta de símbolos, você tem sua resposta sobre o quão compatível com os RTLs realmente são, se vincular bem, bem, experimente.

Tudo isso dito, eu trabalhei em um projeto C ++ que tinha uma das bibliotecas C compiladas com o GCC (acho que era Mingw) por razões semelhantes que você mencionou. Funcionou, o software funcionou bem e foi usado assim por um bom tempo. A principal questão que tivemos era que certas construções da biblioteca impediriam que o executável do MSVC estivesse vinculado às informações de depuração; Ajuste cuidadosa da linha de comando Mingw corrigiu esse problema.

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