Можно ли связать DLL c ++ / cli со статической библиотекой vc ++? - PullRequest
1 голос
/ 14 декабря 2011

Я получил dll c ++ / cli для связи с dll vc ++, но при попытке сделать это со статической версией lib vc ++ возникает куча ошибок компоновщика.Я хочу использовать static, поэтому мне не нужно копировать все остальные файлы dll vc ++ в мой основной проект c #, который использует c ++ / cli dll.

Библиотека vc ++ имеет следующие свойства:* встроенный vs2008* Статическая библиотека* использует MFC в статической библиотеке* Нет поддержки общеязыкового языка

библиотека c ++ / cli имеет следующие свойства:* встроенный vs2010* Динамическая библиотека* Использование MFC в общей DLL* Common Language Runtime Support* linker-> input содержит файл vc ++ lib

Я пытался связать его с vc ++ lib после его сборки в vs2010, но это не помогло.

Так я получаю около 90 ошибок LNK2005, подобных этимиз nafxcwd.lib:

1> nafxcwd.lib (dlgprop.obj): ошибка LNK2005: «public: struct _PROPSHEETPAGEA & __thiscall CPropertyPage :: GetPSP (void)» (? GetPSP @ CPropertyAA @ @)XZ) уже определено в mfc100d.lib (mfc100d.dll)

, затем примерно 30 из них: 1> libcmtd.lib (sprintf.obj): ошибка LNK2005: _sprintf уже определен в msvcrtd.lib (MSVCR100D.dll)

затем три предупреждения LNK4098:

ССЫЛКА: предупреждение LNK4098: defaultlib 'msvcrtd.lib' конфликтует с использованием других библиотек;используйте / NODEFAULTLIB: библиотека 1> ССЫЛКА: предупреждение LNK4098: defaultlib 'nafxcwd.lib' конфликтует с использованием других библиотек;use / NODEFAULTLIB: библиотека 1> ССЫЛКА: предупреждение LNK4098: defaultlib 'libcmtd.lib' конфликтует с использованием других библиотек;используйте / NODEFAULTLIB: библиотека

, тогда я получаю эту последнюю ошибку: libcmtd.lib (crt0.obj): ошибка LNK2019: неразрешенный внешний символ главная ссылка в функции _ _tmainCRTStartup

Я посмотрел предупреждение LNK4098 на msdn, и было решено добавить конфликтующие библиотеки к записи IgnoreSpecific Default library в настройках ввода компоновщика, но это не помогло.

Спасибо,Alex

1 Ответ

2 голосов
/ 21 декабря 2011

Невозможно связать (C ++) библиотеки, собранные с другой версией компилятора VS (иногда это может показаться случайно работающим, но позже вам будет сложно диагностировать сбои).Кроме того, ваши ошибки кажутся типичными при выборе различных конфигураций CRT (одно / многопоточных, отладки / выпуска и т. Д.).

...