首先,我对C++ (和MS )很陌生,所以我很可能在这里遗漏了一些东西。不过,我确实有一些编码经验,而且我很难分辨出我可能逃避的是什么。
我试图使用罗技提供的.lib和.h文件来控制G13键盘,方法是使用以下代码:
编辑:这段代码和错误消息已经被修改,以考虑到Mike和Hans的以下要点(谢谢各位!),但问题仍然是。
#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的新手;- ),并将我的代码输出与罗技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是一个未使用的库。
不幸的是,几天后,我的google fu似乎已经放弃了,我已经不能再继续了。这个链接器错误的例子很多,但是似乎没有一个能修复这种情况--不正确的/NODEFAUTLIB,或者(在我使用这个库的唯一情况下),只是移动#杂注行。
所以我把自己抛在你的高超的知识和经验面前!如果你们中的任何一个人能告诉我我犯了什么可怕的错误,或者我错过了什么基本概念,我会非常感激的。
我有点犹豫是否发布完整的详细日志,但如果需要任何进一步的信息,我将非常乐意提供它。
认为自己能编写代码的TL;DR - Bloke不能执行基本任务,但是他做得很好,并且问得很好。;-)
谢谢你的阅读!
尼尔
发布于 2018-08-28 20:41:37
您需要确保正在使用/Zc:wchar_t进行编译,如代码片段中所示:
bool __cdecl LogiLcdInit(unsigned short *,int)它认为LogiLcdInit的第一个参数是unsigned int,而在工作版本中:
bool __cdecl LogiLcdInit(wchar_t *,int)您可以清楚地看到它是一个wchar_t。现在,默认情况下,/Zc:wchar_t应该是开着的,但是不管出于什么原因,它都不是针对您的。如果没有打开,您可以在"Properties -> C/C++ -> Language ->将wchar_t视为内置类型“中找到它。
有关详细信息,请参阅此页。
https://stackoverflow.com/questions/52065823
复制相似问题