Вопрос

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

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

Затем у меня есть собственный проект, который использует эту библиотеку.Я подключил библиотеку в разделе «Проект» -> «Свойства» -> «Компоновщик» -> «Ввод» и установил соответствующий каталог в разделе «Общие» -> «Дополнительные каталоги библиотек».Я включил заголовок в соответствующий файл и просто вызываю конструктор одного из классов... даже не вызывая пока созданный мной метод.

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

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

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

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

Создание временного файла "c: spamcapture spamcapture spamcapture debug rsp00001081740.rsp" с содержимым [ /verbose: lib /out:"c:lyspamcapture spamcapture spamcapturedebugspamcapture " /gramental /libpath: "C: spamcapture config debug " /manifest /manifestfile:"debugspamcapture.exe.intermediate.manifest "/nodefaultlib:"libcmtd.lib" /nodefaultlib:"nafxcwd. :SpamCaptureSpamCaptureSpamCaptureDebugSpamCapture.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 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: приглашение"

Окно вывода:

Связывание...СВЯЗЬ :предупреждение 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:неразрешенный внешний символ "публично:Виртуальный int __thiscall cwnd :: create (char const *, char const *, unsigned long, struct tagrect const &, class cwnd *, unsigned int, struct ccreatecontext *) "(? Создание@cwnd @@ uaehpbd0kabutagrect @@ pav1@ipauccreatecontext@@ @@ z)

...еще кучу подобного

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj):ошибка LNK2019:неразрешенный внешний символ "публично:структура HICON__ * ThisCall Cwinapp :: Logleicona (Unsigned int) const "(? Logleicona@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 неразрешенных внешних явления

Полученные результаты:

Журнал сборки был сохранен по адресу "File: // c: spamcapture spamcapture spamcapture debug buildlog.htm" spamcapture - 44 Ошибка (ы), 1 предупреждение (ы)

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top