场景
写了一个socket通信的程序,并编译为静态库(lib),Qt写的界面程序会调用该库。在某台电脑上的Qt端程序能成功运行,但是移植到我的电脑上后就只报这个错
lnk1257 代码生成失败
环境
我的电脑上把该socket通信程序编译为库的visual studio版本是2019,而Qt的编译版本是MSVC 2017, 故而调用不了该库,由此导致代码生成失败。
解决方案
幸好我的电脑上还有visual studio2017,把那个程序再在2017的版本上跑一遍,生成 lib 后再替换到 Qt 调用的即可。
但是把程序由高版本2019移植到低版本的2017,vs一般也会报错的。
- 譬如: “no_init_all” 错误,这个错误中文网搜出来千篇一律全是
关于 “no_init_all” 错误源头在winnt.h这一系统头文件中 的解决办法,即修改系统文件winnt.h,但是该文件为系统文件,我试了好几遍后发现没权限。
还是Google大法好: “no_init_all” 解决方法
红框里的部分就是精华所在:他说的是10.0.19041.0这个版本会有这个错误,但是切换为10.0.17134.0或者更早的版本就不会报错了。
右击项目->属性->Windows SDK版本这里就可以查看你有哪些版本,切换一下试试! - 或者这个,socket bind 报错: 不存在从“std::_Bind< false,void,SOCKET&,sockaddr*,unsignet int>”到”int“的适当转换函数,这个链接已经说的很详细了,mark一下。