VisualStudio2015--错误记录总结

7 篇文章 0 订阅

 之前在GitHub上下载了一个开源工程,是用C语言写的需要编译静态库什么的以及生成一个exe文件。我用的是VisualStudio2015遇到了很多麻烦,一点经验都没有,所以记录了一下最终编译成功的这个过程。
 我编译的是jmpeg工程,网上还有一个哥们和我的遭遇一样http://www.cnblogs.com/ubosm/p/5444919.html


1.没有在配置里面添加包含头文件的目录

错误 C1083 无法打开包括文件: “libwebsockets.h”: No such file or directory

解决办法:打开工程配置–>>C/C++ –>>附加包含目录
D:\Output\VS2015\Project\jsmpeg-vnc-master\jsmpeg-vnc-master\source\libwebsocket


2.版本不兼容

错误 LNK2001 无法解析的外部符号 __imp__sprintf jsmpeg-vnc D:\Output\VS2015\Project\jsmpeg-vnc-master\jsmpeg-vnc-master\vs\websockets_static.lib(client-handshake.obj)  1   

分析:错误上写着websockets_static.lib这个静态库里面有无法解析的外部符号
原因:这是老外对这个问题解释的原话:

In visual studio 2015, stdin, stderr, stdout are defined as follow :

#define stdin  (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))

But previously, they were defined as:

#define stdin  (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])

So now __iob_func is not defined anymore which leads to a link error when using a .lib file compiled with previous versions of visual studio.

To solve the issue, you can try defining __iob_func() yourself which should return an array containing {*stdin,*stdout,*stderr}.

Regarding the other link errors about stdio functions (in my case it was sprintf()), you can add legacy_stdio_definitions.lib to your linker options.

意思是说,VS2015的函数与前面版本定义的函数不一样才会报这个错。
解决方法:
打开工程配置–>>链接器 –>>附加依赖项添加下面这个库

legacy_stdio_definitions.lib

3.版本不兼容

错误 LNK2019 无法解析的外部符号 __imp____iob_func,该符号在函数 _lwsl_emit_stderr 中被引用    jsmpeg-vnc  D:\Output\VS2015\Project\jsmpeg-vnc-master\jsmpeg-vnc-master\vs\websockets_static.lib(libwebsockets.obj)    1   

在包含main函数的代码中添加

extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }

或者添加

#if _MSC_VER>=1900  
#include "stdio.h"   
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus   
extern "C"
#endif   
FILE* __cdecl __iob_func(unsigned i) {
    return __acrt_iob_func(i);
}
#endif

编译成功之后还要在目录下载添加相应的dll文件。并将client文件夹放到有exe文件的目录下面。运行即可。

Visual Studio Debug是指使用Visual Studio集成开发环境进行程序调试的过程。调试是开发过程中的重要环节,它可以帮助开发人员找出程序中的错误并进行修复。在Visual Studio中,可以使用多种调试工具和技术来辅助调试过程。 调试前,需要将解决方案配置设置为Debug模式,而不是Release模式。Debug模式生成的代码包含了调试信息,便于程序调试。而Release模式生成的代码则进行了性能优化,但不利于调试。 在Visual Studio中,可以使用跟踪点(Breakpoint)来在代码中设置断点,用于观察程序的执行状态。在调试过程中,可以通过跟踪点将信息记录到“输出”窗口中,以便进行调试信息的查看。可以使用快捷键Ctrl + Alt + B或通过Debug菜单中的Windows选项查看整个解决方案中的断点。 通过调试过程中的断点管理,开发人员可以了解断点在何处设置,以便更好地进行调试。在大型项目中,通常会有许多断点,因此合理的断点管理对于调试操作的效率非常重要。 总结来说,Visual Studio Debug是通过设置断点和使用调试工具来辅助程序调试的过程,可以帮助开发人员找出代码中的错误并进行修复。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【教程】visual studio debug 技巧总结](https://blog.csdn.net/qq_34902437/article/details/126682065)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Visual Studio 调试系列1 Debug 与 Release 模式](https://blog.csdn.net/baibin7264/article/details/101089676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值