Использование двух разных сторонних библиотек дает ошибку компоновки - PullRequest
0 голосов
/ 30 января 2011

Я использую две разные сторонние библиотеки в своем проекте VC ++.Когда я их компилирую, это дает мне ошибки компоновки.

Я проверил примеры приложений с каждой из библиотек.Настройки примера приложения с первой библиотекой (Lib1)

  • 1) Использование MFC в статической библиотеке
  • 2) Многопоточная отладка

Настройки примераприложение с первой библиотекой (Lib2)

  • 1) Использование MFC в общей dll
  • 2) Многопоточная DLL

Я включаю первую библиотекув проекте, добавив

#pragma comment(lib, "./lib/abc.lib") 

оператор

Вторая библиотека добавляется в настройки проекта, добавляя ее как Дополнительные зависимости.

Теперь она работает нормально, но когда я пытаюсь использоватьнекоторые функции из Lib1 получают ошибки, такие как

1> libcmtd.lib (tidtable.obj): ошибка LNK2005: __encode_pointer уже определен в msvcrtd.lib (MSVCR80D.dll) 1> libcmtd.lib (tidtable.obj): ошибка LNK2005: __decode_pointer уже определен в msvcrtd.lib (MSVCR80D.dll) 1> libcmtd.lib (dbgheap.obj): ошибка LNK2005: _malloc уже определена в msvcrtd.lib (MSVCR80D.dll) 1> libcmtd.lib (dbgheap.obj): ошибка LNK2005: _calloc уже определен в msvcrtd.lib (MSVCR80D.dll)

Любое решение, как сделать так, чтобы мой проект компилировался с обеими библиотеками.У меня нет исходного кода для этих библиотек, поэтому я не могу скомпилировать их.

1 Ответ

0 голосов
/ 30 января 2011

Правильное решение - не использовать отладочную сборку библиотеки 1. Можете ли вы получить / использовать сборку выпуска?Таким образом, вы не будете ссылаться на отладочную и выпускную версии системных библиотек.

Если вы не можете получить сборку выпуска, вам придется исключить использование отладочных .libs. ссылка объясняет, как это сделать.

Библиотеки, заканчивающиеся на d, являются версиями отладки (libcmtd.lib).Это те, которые вы хотите исключить (для вашей сборки выпуска).Для отладочной сборки вы захотите исключить библиотеки релизов.

...