undefined reference to `NetUserSetInfo‘和错误 LNK2019 无法解析的外部符号 [email protected]问题

undefined reference to `NetUserSetInfo’和错误 LNK2019 无法解析的外部符号 [email protected]问题

记录下学习路上碰到的问题,和解决问题的过程.

感谢
https://www.cnblogs.com/yangcs/p/5087490.html
的帮助.

在DEV C++上发现如下报错:[Error] ld returned 1 exit status

这个只能说明代码有问题,结合 undefined reference to `NetUserSetInfo’语句,锁定问题在这个NetUserSetInfo函数上.经过检查并没有发现调用拼写等问题.接着ctrl加左键,找到如下头文件,说明
头文件存在.
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题
另外一个lm.h即可包罗lm系列,一次满足
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题

为了找到问题,将代码转移到VS上,得到如下报错:
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题

错误 LNK2019无法解析的外部符号 [email protected],该符号在函数 “void __stdcall password(char * * const,int *)” ([email protected]@[email protected]) 中被引用

查阅
https://www.cnblogs.com/yangcs/p/5087490.html
博客基本得出结论:相应库文件找不到.
因为之前的函数都没有类似问题,一时间还找不出病炤
用该博主的说法,是因为NetUserSetInfo函数所在的头文件在项目属性的包含目录下,但是相应的库文件却不在项目属性的默认库目录里.
那么需要找到对应的库.
查阅
https://docs.microsoft.com/zh-cn/windows/win32/api/lmaccess/nf-lmaccess-netusersetinfo
后得到动态链接库为 Netapi32.dll

在VS里直接添加
#pragma comment(lib,“Netapi32.lib”)
后运行,成功.

接下来在DEV C++里面解决.
DEV C++并不会对#pragma comment(lib,“Netapi32.lib”)代码报错,但也不会有作用,#pragma系列指令是VS特有,而因为其是gcc编译器,故不行.
首先找到对应的库,对lmacess.h右键,打开文件夹,传送到头文件地址
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题

传送到下图undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题

往前翻一下,到x86_64-w64-mingw32
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题
点进lib

undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题
会发现其名字格式是lib+xxxx.a,利用文件搜索,搜索libN,范围过大,再搜索libNet,找到
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题
OK,位置锁定.
回到DEV C++,上方项目-项目属性,发现灰色,因为只创建了cpp文件和h头文件,虽然能运行但并不是一个项目.新建一个项目文件夹,创建项目将其加入,点入项目属性-参数-加入库或者对象
undefined reference to `NetUserSetInfo‘和错误	LNK2019 无法解析的外部符号 [email protected]问题
根据刚才找到的位置,将libnetapi32.a加入,点击确定.重新编译,成功.

并不是一开始就直到是库文件缺席,也是磕磕绊绊才摸索出来的,希望下次碰到类似问题能够快速反应,为以后节省时间.