Использование статической библиотеки, скомпилированной MingGW в Visual Studio - PullRequest
0 голосов
/ 23 декабря 2009

Я работаю над проектом на 100% C, для которого порт Windows скомпилирован с использованием Visual Studio 2008 Express Edition. Мой проект использует несколько библиотек linux, которые я смог статически скомпилировать с помощью MingGW.

Я хотел бы знать, безопасно ли связывать мой проект с этими библиотеками и с какими возможными проблемами я могу столкнуться.

Я мог бы скомпилировать библиотеки, которые я использую с Visual Studio, но это было бы довольно трудоемко, поскольку они основаны на autoconf и не предоставляют никакого файла проекта.

Я уже прочитал это , это , это и это .

1 Ответ

0 голосов
/ 23 декабря 2009

Меня беспокоит "статически скомпилированная" часть. Если библиотеки были скомпилированы в библиотеки DLL, есть большая вероятность, что они будут работать, но, поскольку вы статически связываете, компилятор MINGW сделает определенные предположения, которые верны в отношении его библиотеки времени выполнения, но могут или не могут быть верными для библиотека времени выполнения MSVC. Учитывая, что вы просите код, скомпилированный с одним компилятором, ссылаться на RTL другого компилятора, существует вероятность беспорядка.

Одно из преимуществ, которое у вас есть, заключается в том, что вы имеете дело с C здесь, а не с C ++ - с библиотекой C ++ у вас не будет шансов на эту работу, в C это просто возможно. Я бы очень внимательно следил за тем, чтобы выравнивание структуры было одинаковым для всех компиляторов, и просто попробую. Если компоновщик жалуется на пропущенные символы, значит, вы получили ответ о том, насколько действительно совместимы RTL, если с ним все в порядке, хорошо, попробуйте.

Все это говорит о том, что я работал над проектом C ++, в котором одна из библиотек C была скомпилирована с GCC (я думаю, что это был MINGW) по тем же причинам, о которых вы упомянули. Это работало, программное обеспечение работало нормально и использовалось вот так довольно долго. Основная проблема, с которой мы столкнулись, заключалась в том, что некоторые сборки библиотеки не позволили бы связать исполняемый файл MSVC с отладочной информацией; тщательная настройка командной строки MINGW устранила эту проблему.

...