vs c++ debug 之路

c++ debug 之路

  • 1.错误 C3848 具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)”
  • 2.使用opencv读取tif图片,显示区空白,图片一直显示不出来
  • 3.E0029 应输入表达式
  • 4.链接器工具错误 LNK2005
  • 5.Clock skew detected
  • 6. 请确认...CUDA 12.1.props中的表达式正确,且文件位于磁盘上。
  • 7.cuda MSB3721 返回代码为 1
  • 8. pthread 无法解析的外部符号 __imp_pthread_join
  • 9. LNK1107 文件无效或损坏: 无法在 0x2F8 处读取
  • 10. 使用libtiff库出现无法解析的外部符号的错误
  • 参考文献

1.错误 C3848 具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)”

在这里插入图片描述

class MyCompare
{
public:
    bool operator()(int v1, int v2)
    {
        return v1 > v2;
   }
};

使用STL set容器,通过类的方法自定义数据顺序时,报以上错误

修改方法:

class MyCompare
{
public:

    bool operator()(int v1, int v2) const
    {
        return v1 > v2;
   }
};

2.使用opencv读取tif图片,显示区空白,图片一直显示不出来

刚开始以为是图片格式方面的问题,先用Python存成8位jpg文件,发现仍然存在。

后来查了下,把

system("pause");

改为:

cv::waitKey(0);

就可以了。

真是交了智商税。

3.E0029 应输入表达式

#define CYCLES  49;
for (int cycle = 0; cycle < CYCLES; cycle++)
{
    ***
}

产生原因:#define语句后加了分号。

#define CYCLES  49

4.链接器工具错误 LNK2005

我遇到此bug,是将函数正文也放在了头文件中,然后有多个文件调用了该头文件。

正确的做法是: 从头文件中删除函数正文,只留声明,然后在唯一的源文件中实现函数。

// LNK2005_func_decl.h
int sample_function(int);
// LNK2005_func_impl.cpp
int sample_function(int k) 
{ return 42 * (k % 167); }

5.Clock skew detected

make: warning: Clock skew detected. Your build may be incomplete

产生原因:系统时间比文件修改时间早。

解决办法:

sudo date    查询系统时间
sudo  date -s MM/DAY/YEAR 修改系统日期
sudo date -s hour:min:senconds  修改系统时间

6. 请确认…CUDA 12.1.props中的表达式正确,且文件位于磁盘上。

在这里插入图片描述
解决办法:
项目右键——生成依赖项,选择对应的cuda版本。
vs c++ debug 之路_第1张图片

7.cuda MSB3721 返回代码为 1

vs c++ debug 之路_第2张图片
查看下输出中的具体信息:
vs c++ debug 之路_第3张图片
可见,该错误和device有关。

在项目属性中依次选择如下选项,删除错误提示中的项。
vs c++ debug 之路_第4张图片
重新生成。

8. pthread 无法解析的外部符号 __imp_pthread_join

安装完pthread 库,设置好lib/include,调试过程中报上述错误。
参考C语言编写多线程报错unresolved external symbol __imp__pthread_join,添加

#pragma comment(lib, "pthreadVC2.lib")

仍然解决不了问题。

后来意识到这个pthread 库是32位的,把平台从X64改到X86,重新设置lib/include路径,就OK了。

9. LNK1107 文件无效或损坏: 无法在 0x2F8 处读取

在这里插入图片描述
vs c++ debug 之路_第5张图片
可以看出,是把.lib文件误写为.dll。

10. 使用libtiff库出现无法解析的外部符号的错误

vs c++ debug 之路_第6张图片
解决办法:

  • 1)尝试将配置平台从x64调整为x86;
    在这里插入图片描述
  • 2)编译问题

编译时选择工具问题,下图中应选择1对应的工具。
vs c++ debug 之路_第7张图片

完整安装方式可参考vs2019 libtiff安装及应用。

参考文献

[1] C++错误C3848:具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)
[2] C++Opencv显示图片的时候,一直加载显示不出来
[3] Linux GCC编译警告:Clock skew detected. 错误解决办法
[4] 链接器工具错误 LNK2005
[5] C语言编写多线程报错unresolved external symbol __imp__pthread_join
[6] vs2019 libtiff安装及应用

你可能感兴趣的:(c++,c++,开发语言)