Использование статической библиотеки, составленной Minggw в Visual Studio

StackOverflow https://stackoverflow.com/questions/1950750

Вопрос

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

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

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

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

Это было полезно?

Решение

Это «статически составленная» часть, которая беспокоит меня. Если библиотеки были составлены в DLL, то есть большая вероятность, что это будет работать, но, поскольку вы связываете статически, компилятор Mingw сделает определенные предположения, которые верны в отношении его библиотеки времени выполнения, но могли бы или не могли бы быть правдой. Библиотека времени выполнения MSVC. Учитывая, что вы запрашиваете код, скомпилированный с одним компилятором, чтобы связаться с RTL другого компилятора, там есть потенциал для Mayhem.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top