首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用# LNK2019注释时出现的/VERBOSE错误,被/VERBOSE输出混淆

使用# LNK2019注释时出现的/VERBOSE错误,被/VERBOSE输出混淆
EN

Stack Overflow用户
提问于 2018-08-28 20:34:14
回答 1查看 273关注 0票数 3

首先,我对C++ (和MS )很陌生,所以我很可能在这里遗漏了一些东西。不过,我确实有一些编码经验,而且我很难分辨出我可能逃避的是什么。

我试图使用罗技提供的.lib和.h文件来控制G13键盘,方法是使用以下代码:

编辑:这段代码和错误消息已经被修改,以考虑到Mike和Hans的以下要点(谢谢各位!),但问题仍然是

代码语言:javascript
复制
#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;
}

然而,我收到以下错误;

代码语言:javascript
复制
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文件被正确地拾取了,因为冗长的构建输出显示了如下行

代码语言:javascript
复制
1>Starting pass 1
1>Processed /DEFAULTLIB:LogitechLCDLib

<snip>

1>    Searching C:\Users\clewl\source\repos\ConsoleApplication1\ConsoleApplication1\Lib\x64\LogitechLCDLib.lib: 

但是,在构建输出的末尾是

代码语言:javascript
复制
1> Unused libraries:

<snip>

1> C:\Users\clewl\source\repos\ConsoleApplication1\ConsoleApplication1\Lib\x64\LogitechLCDLib.lib

当我将它与工作示例中的构建输出进行比较时,我看到了如下所示的行

代码语言:javascript
复制
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不能执行基本任务,但是他做得很好,并且问得很好。;-)

谢谢你的阅读!

尼尔

EN

回答 1

Stack Overflow用户

发布于 2018-08-28 20:41:37

您需要确保正在使用/Zc:wchar_t进行编译,如代码片段中所示:

代码语言:javascript
复制
bool __cdecl LogiLcdInit(unsigned short *,int)

它认为LogiLcdInit的第一个参数是unsigned int,而在工作版本中:

代码语言:javascript
复制
bool __cdecl LogiLcdInit(wchar_t *,int)

您可以清楚地看到它是一个wchar_t。现在,默认情况下,/Zc:wchar_t应该是开着的,但是不管出于什么原因,它都不是针对您的。如果没有打开,您可以在"Properties -> C/C++ -> Language ->将wchar_t视为内置类型“中找到它。

有关详细信息,请参阅此页

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52065823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档