Ошибки компоновщика C++ Visual Studio 2005
Я получаю целую кучу ошибок компоновщика в Visual Studio для методов, которые я даже не вызываю напрямую. Я - Java-разработчик днем, но у меня есть проект, который мне нужно сделать на C++, предназначенный для работы на компьютерах с Windows. Следовательно, я застрял возиться с Visual Studio.
По сути, у меня есть проект os, к которому я добавил метод доступа. Я скомпилировал этот проект в виде файла.lib (компилирует и ссылки прекрасно).
Затем у меня есть собственный проект, который использует эту библиотеку. Я включил библиотеку в Project->Properties -> Linker -> Input и установил соответствующий каталог в General -> Additional Lib Directory. Я включил заголовок в соответствующий файл, и я просто вызываю конструктор одного из классов... даже не вызывая метод, который я создал.
Код компилируется, но я получаю следующую гору ошибок компоновщика - в основном ошибки LNK2019 и LNK2001. Я попытался перекомпилировать под другими настройками (lib, exe и т. Д.), И ошибки компоновщика, кажется, только умножаются. Когда я возвращаюсь к предыдущим настройкам, количество ошибок остается на пике. Любые идеи, как это исправить?
Журнал сборки
Начата сборка: Проект: SpamCapture, Конфигурация: Отладка |Win32
Командные Линии:
Создание временного файла "c:\SpamCapture\SpamCapture\SpamCapture\Debug\RSP0000103081740.rsp" с содержимым [ /VERBOSE:LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe LIBR INCR " /INCR "C:\SpamCapture\Config\Debug\" /MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest" /NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"nafxcwd.lib" /DEBUG /PDB::\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lible32 olible323232.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"
Окно вывода:
Связывание... ССЫЛКА: предупреждение 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: \ Pr Файлы ogram \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: \ Программные файлы \ 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 Файлы \ 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.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 F iles \ 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: Закончен поиск библиотек
Ошибки компоновщика начинаются здесь:
KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj): ошибка LNK2001: неразрешенный внешний символ "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &, класс 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 @ incented @@) в IEN public: __thiscall CKeyCapture_ConfigDlg::CKeyCapture_ConfigDlg(класс CWnd *) "(?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)
... куча больше как это
(?DoDataExchange@SetupDialog@@MAEXPAVCDataExchange@@@Z) C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe: фатальная ошибка LNK1120: 34 неразрешенных внешних кода
Результаты:
Журнал сборки был сохранен в "file://c:\SpamCapture\SpamCapture\SpamCapture\Debug\BuildLog.htm" SpamCapture - 44 ошибок, 1 предупреждений
4 ответа
Библиотека KeyCapture_Config.lib
использует классы MFC GUI (CWnd
, CWinApp
и т. д.), но приложение, с которым вы его связываете, является консольным приложением (см. /SUBSYSTEM:CONSOLE
опция в командной строке вашего компоновщика). Это не сработает. Вы должны создать новый проект приложения MFC GUI и добавить библиотеку в этот проект.
Изменить: я только что проверил ссылку в вашем комментарии: http://dynamicnetservices.com/~will/academic/textinput/keycapture/ и кажется, что KeyCapture_Config на самом деле является диалоговым приложением MFC, которое использует DLL KeyCapture. Может быть возможно использовать KeyCapture в консольном приложении, связываясь непосредственно с KeyCapture.lib
,
Ошибка ссылки, по-видимому, вызывает недовольство отсутствием большого количества функций MFC, и вы добавляете в строки ссылок: /NODEFAULTLIB:"nafxcwd.lib", что исключает MFC. Библиотека, на которую вы ссылаетесь, создана с помощью MFC?
Другие вещи, которые нужно проверить, это то, что вы компилируете приложение и библиотеку с одинаковым набором символов (т. Е. Оба многобайтовых или оба в юникоде).
Когда вы создаете библиотеку, шаг ссылки отсутствует, поэтому произвольная коллекция объектов может быть добавлена в библиотеку без учета того, что еще им может понадобиться.
Я думаю, что Роб Уокер прибил проблему. Если в документации для KeyCapture_Config.lib говорится, что нет связи с MFC, проверьте источник на наличие директив, которые требуют связи с MFC. Что-то вроде этого:
#pragma comment(lib, "nafxcwd.lib")
приведет к зависимости от MFC, и документ KeyCapture_Config.lib может быть устаревшим.
Похоже, ваш проект связан с многопоточной средой отладки. Это твое намерение? В этом случае могут возникнуть несоответствия с библиотекой KeyCapture_Config, которую вы, похоже, используете.
Является ли KeyCapture_Config сторонней библиотекой? Если так, то вы собрали его из исходного кода или для вас была предоставлена библиотека lib/dll?
Может потребоваться некоторое исследование, на котором строятся среды выполнения C/C++. Вы можете сослаться на статью Microsoft KB, которая может помочь пролить свет на возможные несоответствия сборки во время выполнения.