2010-10-10 1 views
1

У меня есть библиотека сообщений, построенная поверх Qt и буферов протокола Google. В настоящее время он строится с помощью MinGW/GCC в Windows. Моя цель - использовать одну и ту же библиотеку в C# на .NET с помощью тонкой оболочки сверху с использованием C++/CLI (наведение неуправляемого кода на управляемый код).Использование библиотеки DLL с использованием MinGW/GCC в проекте Visual Studio 2010 C++/CLI

Я попытался использовать выпущенную MinGW DLL непосредственно в моем проекте C++/CLI, но я продолжаю получать ошибки компоновщика (не могу вспомнить коды ошибок прямо сейчас, но что-то про недостающие токены и функции/подписи).

Первый вопрос: должен ли я использовать DLL с выпуском MinGW с помощью компилятора/компоновщика Visual Studio? Или мне нужно снова скомпилировать библиотеку, используя только VS-компилятор для всех проектов?

Если я должен иметь возможность напрямую использовать DLL, созданный с помощью MinGW, как я могу ссылаться на нее в Visual Studio 2010? В настройках проекта, похоже, ищет * .lib-файлы, но я не могу найти никаких .lib-файлов в выводе MinGW/GCC. Он производит * .a файлы, но похоже, что Visual Studio не обрабатывает этот тип файлов.

Следует также упомянуть, что и Qt, и protobuf также скомпилированы с помощью MinGW. Но я могу, конечно, перекомпилировать все части в VS 2010. Было бы неплохо сохранить время перекомпиляции, так как наш buildserver уже имеет рабочую настройку с использованием MinGW.

+1

Ненавижу комментировать вне темы, но не могли бы вы описать, как вы скомпилировали буферы протокола Google, используя MinGW в Windows? –

ответ

2

Самый простой способ использовать его - перекомпиляция с помощью Visual Studio. Это когда я предполагаю типы и классы C++, используемые в интерфейсе, который вы собираетесь использовать.

Если у вас есть интерфейс C для этой библиотеки, вы можете динамически загружать библиотеку через LoadLibrary и использовать GetProcAddress для доступа к этим функциям.

Однако это полностью зависит от того, как вы собираетесь использовать библиотеку.

+1

Qt не является интерфейсом C ... Перекомпиляция с Visual Studio - это не просто самый простой способ, это единственный способ. gcc не использует тот же макет памяти для классов C++, поэтому даже если вы создали библиотеку импорта для библиотеки DLL, созданной mingw-gcc, это не сработает. –

+0

Хорошо, спасибо за ответы обо всех вас .. Я продолжу перекомпилировать все это в VS тогда. – notbo

+0

@Ben Voigt: Я знаю, что Qt не имеет интерфейса C сам по себе. Но он мог бы создать один для того, что ему нужно. В этом случае он мог бы использовать его. Даже если он был создан MinGW – Vinzenz