Во-первых, я новичок в C ++ (и MS VS), поэтому я, скорее всего, что-то здесь упускаю. Однако у меня есть некоторый опыт написания кода, и мне трудно понять, что может ускользнуть от меня.
Я пытаюсь использовать предоставленные Logitech файлы .lib и .h для управления клавиатурой G13, используя следующий код:
[Редактировать: этот код и сообщения об ошибках были изменены, чтобы учесть приведенные ниже моменты от Майка Вайна и Ханса Пассанта (спасибо, ребята!), Но проблема все еще остается]
#include "pch.h"
#include <iostream>
#pragma comment(lib,"LogitechLCDLib")
#include "Include\LogitechLCDLib.h"
int main()
{
wchar_t str[] = L"Hello";
LogiLcdInit(str, 1);
return 0;
}
Однако я получаю следующие ошибки;
Error LNK2019 unresolved external symbol "bool __cdecl LogiLcdInit(wchar_t *,int)" (?LogiLcdInit@@YA_NPAGH@Z) referenced in function _main ConsoleApplication1 C:\Users\clewl\source\repos\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.obj 1
Error LNK1120 1 unresolved externals ConsoleApplication1 C:\Users\clewl\source\repos\ConsoleApplication1\Debug\ConsoleApplication1.exe 1
Я немного побывал здесь по домам - сначала я думал, что делал что-то не так с wchar_t * (это было для меня новым, так как это было правильно), а потом, по какой-то причине, .lib не был ' загружается.
Однако теперь я обнаружил чудеса / VERBOSE (сказал, что я новичок в Visual Studio ;-)) и сравнивал вывод моего кода с (рабочим) примером, поставляемым с Logitech SDK.
Я вполне уверен, что .h в порядке, так как intellisense показывает определение, а файл .lib подбирается правильно, так как в подробном выводе сборки отображаются такие строки, как
1>Starting pass 1
1>Processed /DEFAULTLIB:LogitechLCDLib
<snip>
1> Searching C:\Users\clewl\source\repos\ConsoleApplication1\ConsoleApplication1\Lib\x64\LogitechLCDLib.lib:
Тем не менее, в конце сборки выводится
1> Unused libraries:
<snip>
1> C:\Users\clewl\source\repos\ConsoleApplication1\ConsoleApplication1\Lib\x64\LogitechLCDLib.lib
Когда я сравниваю это с выводом сборки из рабочего примера, я вижу такие строки, как
1> Processed /DEFAULTLIB:LogitechLCDLib.lib
<snip>
1> LogitechLCDLib.lib(LogitechLCDLib.obj)
1> LogitechLCDLib.lib(stdafx.obj)
<snip>
1> Searching ..\..\Lib\x86\LogitechLCDLib.lib:
1> Found "bool __cdecl LogiLcdInit(wchar_t *,int)" (?LogiLcdInit@@YA_NPA_WH@Z)
1> Referenced in LCDDemoDlg.obj
1> Loaded LogitechLCDLib.lib(LogitechLCDLib.obj)
1> Found ___@@_PchSym_@00@UyfrowztvmgUdlipUyIzCIHuEBIJHIIFJUhixUhwphUoxwUoltrgvxsoxworyUivovzhvUhgwzucOlyq@9DC0ED7C20F9DB3D
1> Referenced in LogitechLCDLib.lib(LogitechLCDLib.obj)
1> Loaded LogitechLCDLib.lib(stdafx.obj)
среди прочих, и нет ссылок на LogitechLCDLib.lib, который является неиспользуемой библиотекой.
К сожалению, после довольно напряженной пары дней мой гугл-фу, похоже, разочаровался во мне, и я не могу прогрессировать дальше. Есть много примеров этой ошибки компоновщика, но ни один из них, похоже, не исправляет этот случай - неверный / NODEFAUTLIB или (как в единственном случае, который я могу найти с помощью этой библиотеки), просто перемещая строку комментария #pragma.
И поэтому я бросаюсь перед вашими превосходящими знаниями и опытом! Если бы кто-нибудь из вас, добрые люди, мог сказать мне, какую вопиющую ошибку я совершаю, или какую фундаментальную концепцию я пропускаю, я был бы очень благодарен.
Я немного не решаюсь публиковать полные подробные журналы, но если потребуется какая-либо дополнительная информация, я буду более чем рад предоставить ее.
TL; DR - Блок, который думает, что умеет кодировать, не может выполнять базовые задачи, но хорошо выполнил задание и очень мило спросил. ; -)
Спасибо за чтение!
Neal