gpt4 book ai didi

c++ - 使用#pragma 注释时出现 LNK2019 错误,被/VERBOSE 输出混淆

转载 作者:太空狗 更新时间:2023-10-29 21:33:14 25 4
gpt4 key购买 nike

首先,我是 C++(和 MS VS)的新手,所以我很可能在这里遗漏了一些东西。不过,我确实有一些编码经验,但我很难辨别出我可能遗漏了什么。

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

[编辑:此代码和错误消息已更改,以考虑 Mike Vine 和 Hans Passant 的以下几点(谢谢你们!),但问题仍然存在]

#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* 上做错了(它对我来说是新的,因为它是 const 的正确性),然后,由于某种原因,.lib 不是'正在加载。

但是,我现在发现了/VERBOSE 的神奇之处(告诉你我是 Visual Studio 的新手 ;-)),并且一直在将我的代码的输出与 Logitech SDK 提供的(工作)示例进行比较。

我有理由相信 .h 没问题,因为智能感知显示了定义,并且 .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,或者(在我能找到的使用这个库的唯一情况下),只是移动 #pragma 注释行。

所以我投身于您卓越的知识和经验!如果你们中的任何好心人能告诉我我犯了什么严重错误,或者我遗漏了什么基本概念,我将不胜感激。

我有点犹豫是否要发布完整的详细日志,但如果需要任何进一步的信息,我会非常乐意提供。

TL;DR - 认为自己可以编写代码的家伙无法执行基本任务,但进展顺利,问得很好。 ;-)

感谢阅读!

尼尔

最佳答案

您需要确保您正在使用代码段中的 /Zc:wchar_t 进行编译:

bool __cdecl LogiLcdInit(unsigned short *,int)

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

bool __cdecl LogiLcdInit(wchar_t *,int)

您可以清楚地看到它是正确的wchar_t。现在 /Zc:wchar_t 应该 默认打开,但无论出于何种原因它不适合你。如果它不存在,您可以在“属性 -> C/C++ -> 语言 -> 将 wchar_t 视为内置类型”中找到它

参见 this page获取更多信息。

关于c++ - 使用#pragma 注释时出现 LNK2019 错误,被/VERBOSE 输出混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52065823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com