Ошибки компоновщика C ++ Visual Studio 2005 - PullRequest
2 голосов
/ 27 октября 2008

Я получаю целую кучу ошибок компоновщика в 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 "/ INCREMENTAL / LIBPATH:" C: \ SpamCapture \ Config \ Debug \ "/ MANIFEST /MANIFESTFILE:"CaptureS " KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.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"

Окно вывода:

Linking ... ССЫЛКА: предупреждение LNK4067: неоднозначная точка входа; выбрано '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.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.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: Закончен поиск библиотек

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

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

... еще куча таких

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 (класс CWnd *) " (?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z) * ​​1052 *

... еще куча таких

(? 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 ]

5 голосов
/ 27 октября 2008

Библиотека KeyCapture_Config.lib использует классы MFC GUI (CWnd, CWinApp и т. Д.), Но приложение, в которое вы ее связываете, является консольным приложением (см. Параметр /SUBSYSTEM:CONSOLE в командной строке компоновщика). ). Это не сработает. Вы должны создать новый проект приложения MFC GUI и добавить библиотеку в этот проект.

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

1 голос
/ 27 октября 2008

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

Другие вещи, которые нужно проверить, это то, что вы компилируете приложение и библиотеку с одинаковым набором символов (т. Е. Оба многобайтовых или оба в юникоде).

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

0 голосов
/ 27 октября 2008

Я думаю, что Роб Уокер прибил проблему. Если в документации для KeyCapture_Config.lib сказано, что нет связи с MFC, проверьте источник на наличие директив, которые требуют связи с MFC. Примерно так:

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

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

0 голосов
/ 27 октября 2008

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

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

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

...