Ошибки компоновщика C ++ Visual Studio 2005

Я получаю целую кучу ошибок компоновщика в Visual Studios для методов, которые я даже не вызываю напрямую. Я занимаюсь Java-разработкой днем, но у меня есть проект, который мне нужно сделать на C ++, предназначенный для работы на машинах с Windows. Следовательно, я застрял в Visual Studio.

К сожалению, у меня есть проект операционной системы, в который я добавил метод доступа. Я скомпилировал этот проект как файл .lib (компилируется и связывается нормально).

Затем у меня есть собственный проект, использующий эту библиотеку. Я включил библиотеку в Project-> Properties -> Linker -> Input и установил соответствующий каталог в General -> Additional Lib Directories. Я включил заголовок в соответствующий файл и просто вызываю конструктор одного из классов ... даже не вызывая еще созданный мной метод.

Код компилируется, но я получаю следующую гору ошибок компоновщика - в основном ошибки LNK2019 и LNK2001. Я пробовал перекомпилировать с разными настройками (lib, exe и т. Д.), И кажется, что ошибки компоновщика только умножаются. Когда я возвращаюсь к предыдущим настройкам, количество ошибок остается на пике. Любые идеи, как это исправить?

Журнал сборки

Началась сборка: Проект: SpamCapture, Конфигурация: Отладка | Win32

Командные строки:

Создание временного файла «c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp» с содержимым [/ VERBOSE: LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe / L / "C: \ SpamCapture \ Config \ Debug \" / MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest "/NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"nafxcwd.lib "/ DEBUG:" PDB / DEBUG : \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ SpamCapture.pdb "/ ПОДСИСТЕМА: КОНСОЛЬ / МАШИНА: X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib oolaut32.lib comdlg32.lib advapi32.lle32.lib shell32.lib .lib uuid.lib odbc32.lib odbccp32.lib

". \ Debug \ Interaction.obj"

". \ Debug \ InteractionSet.obj"

". \ Debug \ LogReader.obj"

". \ Debug \ SpamCapture.obj"

". \ Debug \ stdafx.obj"

". \ Debug \ SpamCapture.res"

". \ Debug \ SpamCapture.exe.embed.manifest.res"] Создание командной строки "link.exe @c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp / NOLOGO / ERRORREPORT: PROMPT"

Окно вывода:

Ошибки компоновщика начинаются здесь:

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): ошибка LNK2001: неразрешенный внешний символ "public: virtual int __thiscall CWnd :: Create (char const *, char const *, unsigned long, struct tagRECT const &, class CWnd *, unsigned int, struct CCreateContext *) "(? Create @ CWnd @@ UAEHPBD0KABUtagRECT @@ PAV1 @ IPAUCCreateContext @@@ Z)

... еще несколько подобных

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): ошибка LNK2019: неразрешенный внешний символ «public: struct HICON__ * thiscall CWinApp :: LoadIconA (unsigned int) const» (? LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @Z) упоминается в функции "public: __thiscall CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg (class CWnd *)" (?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

... еще несколько подобных

(? DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@ Z) C: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ SpamCapture.exe: фатальная ошибка LNK1120: 34 неразрешенных внешних объекта

Результаты:

Журнал сборки был сохранен в "файл: // c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ BuildLog.htm" SpamCapture - 44 ошибки, 1 предупреждение (я)

Библиотека _1_ использует классы графического интерфейса MFC (_2_, _3_ и т. Д.), Но приложение, с которым вы ее связываете, является консольным приложением (см. Параметр _4_ в командной строке компоновщика). Это не сработает. Вы должны создать новый проект приложения MFC GUI и добавить библиотеку в этот проект.


person Gopherkhan    schedule 27.10.2008    source источник


Ответы (4)


Изменить: я только что проверил ссылку в вашем комментарии: http://dynamicnetservices.com/~will/academic/textinput/keycapture/, и кажется, что KeyCapture_Config на самом деле является диалоговым приложением MFC, которое использует KeyCapture DLL. Возможно использование KeyCapture в консольном приложении путем прямой ссылки на KeyCapture.lib.

Ошибка ссылки, похоже, связана с отсутствием многих функций MFC, и строки ссылки включают: /NODEFAULTLIB:"nafxcwd.lib ", что исключает MFC. Библиотека, на которую вы ссылаетесь, построена с помощью MFC?

person ChrisN    schedule 27.10.2008

Также следует проверить, что вы компилируете приложение и библиотеку с одним и тем же набором символов (т.е. как многобайтовые, так и оба Unicode).

Когда вы создаете библиотеку, шаг связывания отсутствует, поэтому в библиотеку можно добавить произвольный набор объектов, не обращая внимания на то, что еще им может понадобиться.

Похоже, ваш проект связан со средой выполнения Debug Multithreaded. Это твое намерение? В таком случае могут быть несоответствия с библиотекой KeyCapture_Config, которую вы, похоже, используете.

person Rob Walker    schedule 27.10.2008
comment
Тогда всегда полезно понять, что является источником запроса ссылки для nafxcwd. Почему приложение считает, что ему нужно связать его? По словам Скотта, это звучит так, как будто построенные компоненты будут иметь разные настройки CRT или MFC. - person Gopherkhan; 27.10.2008
comment
Фактический проект, с которым я интегрируюсь, можно найти здесь: dynamicnetservices.com/~will/ Acade / textinput / keycapture Библиотека времени выполнения установлена ​​в многопоточную отладочную DLL (/ MDd). Должен ли я делать это где-нибудь еще? - person Rob Walker; 27.10.2008

KeyCapture_Config - это сторонняя библиотека? Если да, то вы собрали его из исходного кода или вам была предоставлена ​​библиотека lib / dll?

Может потребоваться некоторое исследование, на основе которого создаются среды выполнения C / C ++. Вы можете сослаться на статью базы знаний Майкрософт, которая может пролить свет на возможные расхождения во время выполнения сборки.

Я думаю, что Роб Уокер решил проблему. Если в документации для KeyCapture_Config.lib говорится об отсутствии связи с MFC, проверьте источник на наличие директив, требующих привязки к MFC. Что-то вроде этого:

person Scott Saad    schedule 27.10.2008
comment
Связывание ... ССЫЛКА: предупреждение LNK4067: неоднозначная точка входа; selected 'mainCRTStartup' Поиск библиотек Поиск C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: Поиск C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: Поиск C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib: Поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib: Поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib: поиск в C : \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib: поиск в C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib : Поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.l ib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.lib: поиск в C : \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib: поиск в C: \ Program Files \ Microsoft Visual S tudio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib : Поиск в C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib: поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib : Поиск в C: \ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib: Searchin - person Gopherkhan; 27.10.2008

может вызвать зависимость от MFC, и документ KeyCapture_Config.lib может быть устаревшим.

#pragma comment(lib, "nafxcwd.lib")

На самом деле я установил libcmtd.lib и nafxcwd.lib на игнорирование, так как я получал ряд ошибок LNK2005 для них. См .: ошибка LNK2005: public: virtual void __thiscall CWnd :: PreSubclassWindow (void) (? PreSubclassWindow @ CWnd @@ UAEXXZ), уже определенный в mfc80ud.lib (MFC80UD.DLL)

person Rodney Schuler    schedule 27.10.2008