小编rwo*_*ong的帖子

LNK2038:检测到'RuntimeLibrary'不匹配:值'MT_StaticRelease'与file.obj中的值'MD_DynamicRelease'不匹配

我正在整合Matlab,CCuda在一个项目中.我使用Matlab mix将c语言编写的matlab mx函数与cuda运行时库连接起来,出现了关于静态发布中的冲突和c文件与库之间的动态发布的链接错误.谁能解决这个问题?

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 
Run Code Online (Sandbox Code Playgroud)

c++ matlab cuda visual-c++

47
推荐指数
4
解决办法
7万
查看次数

OpenCV - 用于边缘图(不是轮廓)的approxPolyDP

我已经成功地在轮廓(cv :: findContours)上应用了方法cv :: approxPolyDP,以便用更简单的多边形表示轮廓并隐式地做一些去噪.

我想在从RGBD相机(通常非常嘈杂)获取的边缘地图上做同样的事情,但到目前为止还没有太大的成功,我在网上找不到相关的例子.我需要这个的原因是,通过边缘图,人们还可以使用手指之间的边缘,手指遮挡产生的边缘或手掌中创建的边缘.

此方法是否适用于轮廓以外的一般边缘贴图?

有人能指出我的例子吗?

附上一些图片:

轮廓的成功示例: 在此输入图像描述

边缘图的问题案例:

很可能我以错误的方式绘制东西,但只绘制方法返回的像素表明最终结果中可能没有表示大的区域(根据epsilon参数,这并没有太大变化).

在此输入图像描述

我还附上了一张深度图像,类似于我在上面描述的实验管道中使用的图像.这个深度图像不是由深度相机获取的,而是通过使用OpenGL读取gpu的深度缓冲区来合成生成的.

在此输入图像描述

仅供参考,这也是直接从深度相机获取的深度图像的边缘图(使用原始图像,不应用平滑等)

在此输入图像描述

(从深度相机看到的手,手掌朝上,手指"朝向手掌"关闭)

c++ opencv image-processing gesture-recognition

14
推荐指数
1
解决办法
2万
查看次数

机器学习算法

我希望为我的目的研究一个合适的算法,有人可以为以下场景建议一个好的学习算法:

用户可以在一组句子中搜索某些单词.然后我将根据该关键字返回前10个句子,我希望算法允许用户输入,即用户可以点击最佳句子,这些信息将有助于搜索算法在将来返回更合适的结果.

algorithm information-retrieval artificial-intelligence machine-learning

7
推荐指数
1
解决办法
681
查看次数

这是否是C++中的缺陷std :: get <T>(const std :: pair <const T,U>&)由于const T而无法编译?

如题.

当使用该std::get<T>(pair)对的第一个成员是const时,会发生此编译错误,该函数来自std::map或的迭代器std::unordered_map.

要测试编译错误,请注释掉"notstd"重载get.

我已经在Stack Overflow上研究了这个问题,下面列出了三个最相关的问题.

现有的答案让我相信它应该是一个缺陷报告,应该将相应的std::get重载添加到标准库中,并且应该扩展应用于临时常量引用的自动生命周期扩展以涵盖这种情况.

我还研究了它是否与布局的专业化有关(问题14272141,下面链接).但是,我的代码片段仅要求对两个成员之一的const引用; 即使布局专门化,对任一成员的const引用仍应存在.

根据现有的答案,我理解在两者之间铸造const std::pair<T, U>&并且const std::pair<const T, U>&不安全.

namespace notstd
{
    template <class T, class U>
    const T& get(const std::pair<const T, U>& tu)
    {
        return tu.first;
    }
}
int test(int value) 
{
    using namespace notstd;
    using namespace std;
    const std::pair<const int, bool> one(value, false);
    const auto two = get<int>(one);
    const auto three = get<const int>(one);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

相关性高的问题:

c++ c++14

7
推荐指数
1
解决办法
333
查看次数

快速搜索压缩文本文件

我需要能够在压缩的大量文件(.txt)中搜索文本.压缩可以改为其他东西,甚至可以变成专有的.我想避免解压缩所有文件并压缩(编码)搜索字符串并在压缩文件中搜索.这应该可以使用霍夫曼压缩与所有文件的相同码本.我不想重新发明轮子,所以..任何人都知道,做这样的事情或霍夫曼算法实现和测试,或者一个更好的主意库?

提前致谢

c++ compression algorithm full-text-search huffman-code

6
推荐指数
2
解决办法
3055
查看次数

使用OpenMp和SSE进行分段故障

我刚刚开始尝试将OpenMP添加到某些SSE代码中.

我的第一个测试程序SOMETIMES在_mm_set_ps中崩溃,但在我设置if(0)时有效.

它看起来很简单,我必须遗漏一些明显的东西.我正在使用gcc -fopenmp -g -march = core2 -pthreads进行编译

  #include <stdio.h>
  #include <stdlib.h>
  #include <immintrin.h>

  int main()
  {
  #pragma omp parallel if (1)
   {
  #pragma omp sections
       {
  #pragma omp section
           {
              __m128 x1 = _mm_set_ps ( 1.1f, 2.1f, 3.1f, 4.1f );
           }
  #pragma omp section
           {
              __m128 x2 = _mm_set_ps ( 1.2f, 2.2f, 3.2f, 4.2f );
           }
       } // end omp sections
   } //end omp parallel

  return 0;
  }
Run Code Online (Sandbox Code Playgroud)

c gcc sse openmp

6
推荐指数
1
解决办法
1493
查看次数

Visual Studio可以告诉我SSE2寄存器溢出计数的编译代码吗?

我没有任何真正的编译器知识,我曾经为选定的代码段手工编写SSE2函数.我知道如何阅读生成的机器代码,但很大程度上没有意识到编译器可能实现的疯狂优化.我的所有工作都是使用Visual Studio完成的.

有没有办法让Visual Studio告诉我一个函数的SSE2寄存器溢出计数?原因是我们很快就能够批量生成类似SSE2的代码(模板化),并且我们希望将它们中的每一个编译成适当质量的机器代码.我们可能无法手动检查每一个.我希望得到的是一些保证编译的代码是可接受和简洁的.我不需要最后一点果汁.

或者,是否有一个关键字的作用就像__forceinline迫使编译器不溢出任何SSE2寄存器,如"__forcenospill"?(如果必须发生溢出,编译将失败,因此我会发现问题,并尝试重构我的SSE2代码.)

使用现有的矢量库或阻塞器是不可能的,因为有些计算需要高度注册(在"简单操作"中一步操作6个或更多操作数(注1);中间值提升为16位或者32位运行并转换回来等等)用通用向量库来重新表示它将意味着运行时加倍或三倍(在那里,完成了).

商业工具也没关系,鉴于项目的性质,我当然可以负担得起.

如果没有这样的工具,我将采用剖析.您可以关注这篇文章,让我知道这些事情不存在.

谢谢!

(注1)它是一种自适应阈值算法.

compiler-construction optimization sse2 visual-studio

6
推荐指数
0
解决办法
441
查看次数

我可以将final关键字应用于C++ 11中的POD(标准布局)结构吗?我是不是该?

在一个充满对象(具有适当行为)和相对较少的非面向对象结构(仅由数据字段和无方法组成)的C++项目中,我想防止意外滥用这些结构,其中一个可能会尝试创建一个继承自它的类.

根据我的理解,因为这些"POD"(普通旧数据)结构没有虚拟析构函数,所以无法通过POD类型的指针正确删除派生类对象(如果允许创建它) .

这似乎是C++ 11"final"关键字的一个很好的用例,它将类或结构标记为不可继承.

但是,我想知道"final"关键字是否会导致结构变为非POD?

我怀疑标准文档可能已经解决了这个问题,但我没有足够的智慧来筛选很长的文档来查找.任何有用的指针都是受欢迎的.

注意:我只是不知道它通过了一些编译器供应商的编译.通过汇编不保证:

  • 编译的代码是否会在所有情况下正确执行(特别是当技术应用于更大,更复杂的项目时),
  • C++标准组织是否打算以这种方式使用它.
#include <iostream>
using namespace std;

struct Pod final
{
    int a;
    int b;
    int c;
};

#if 0
class FailsBecauseCannotDeriveFromFinalAnything : public Pod
{
};
#endif

class ContainsSomethingFinalAsMember
{
public:
    ContainsSomethingFinalAsMember() : pod() {}
private:
    Pod pod;
};

int main() 
{
    std::cout << std::is_pod < Pod > :: value << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance struct final c++11

6
推荐指数
1
解决办法
322
查看次数

在NUnit中延迟加载TestCaseSource

我有一些使用TestCaseSource函数的NUnit测试.不幸的是,我需要的TestCaseSource函数需要很长时间才能初始化,因为它以递归方式扫描文件夹树以查找将传递给测试函数的所有测试图像.(或者,它可以在每次运行时从文件列表XML加载,但仍然需要自动发现新的图像文件.)

是否可以与TestCaseSource一起指定NUnit属性,以便NUnit在用户单击节点或运行测试套件之前不会枚举测试用例(不调用TestCaseSource函数)?

将所有测试图像存储在文件夹中的需求是项目要求,因为其他无权访问测试项目的人需要将新的测试图像添加到文件夹,而无需修改测试项目的源代码.然后他们就可以查看测试结果.

一些教条式的单位测试者可能会反驳说我正在使用NUnit来做一些它不应该做的事情.我不得不承认我必须满足一个要求,NUnit是一个很棒的工具,有一个很好的GUI,可以满足我的大多数要求,所以我不关心它是否是正确的单元测试.

其他信息(来自NUnit文档)

关于对象构造的注释

NUnit在加载测试时定位测试用例,使用非静态源创建每个类的实例,并构建要执行的测试列表.每个源对象此时仅创建一次,并在加载所有测试后销毁.

如果数据源位于测试夹具本身中,则使用TestFixtureAttribute上提供的fixture参数的相应构造函数或默认构造函数(如果未指定参数)创建对象.由于此对象在运行测试之前被销毁,因此除了通过参数本身之外,这两个阶段之间或不同运行之间无法进行通信.

似乎预先加载测试用例的目的是避免在TestCaseSource和测试执行之间进行通信(或副作用).这是真的?这是要求预先加载测试用例的唯一原因吗?

注意:

需要修改NUnit,如http://blog.sponholtz.com/2012/02/late-binded-parameterized-tests-in.html中所述.

有计划将此选项引入更高版本的NUnit.

nunit delay-load testcasesource

5
推荐指数
1
解决办法
1073
查看次数

如何用ep_之前的time_t计算C++中的时差?

我想用我的简单程序做的是计算两个日期之间的秒差.

time_t referenceDate;
time_t dateNow = time(0);
struct tm referenceDateComponent = {0};
referenceDateComponent.tm_hour = 0;
referenceDateComponent.tm_min = 0;
referenceDateComponent.tm_sec = 0;
referenceDateComponent.tm_year = 89;
referenceDateComponent.tm_mon = 11;
referenceDateComponent.tm_mday = 31;
referenceDate = mktime(&referenceDateComponent);  
long seconds = difftime(dateNow, referenceDate);
Run Code Online (Sandbox Code Playgroud)

Whit应用程序上面的代码工作正常,但如果尝试设置tm.year负数(在1900年之前构建日期)mktime()函数返回-1

我知道该time_t类型只管理从1970年1月1日UTC开始的日期,根据文档:

由于历史原因,它通常被实现为表示自UTC时间1970年1月1日00:00(即,unix时间戳)以来经过的秒数的整数值.尽管库可以使用替代时间表示来实现此类型.

我知道还有Boost库,但对我来说不是一个有用的解决方案.

所以我的问题是,从1970年以前的日期开始,有什么办法可以在几秒钟内获得变化?

c++ time-t mktime difftime

5
推荐指数
2
解决办法
4588
查看次数

Visual Studio 2010中的std :: make_shared()的友元函数(不是Boost)

如何做朋友的功能std::make_shared().

我试过了:

class MyClass{
public:
     friend std::shared_ptr<MyClass> std::make_shared<MyClass>();
     //or
     //friend std::shared_ptr<MyClass> std::make_shared();
protected:
     MyClass();
};
Run Code Online (Sandbox Code Playgroud)

但它不起作用(我使用的是Visual Studio 2010 SP1)

c++ friend visual-studio-2010 shared-ptr

4
推荐指数
1
解决办法
3199
查看次数

在具有整页堆的buf = malloc(1)之后,为什么在覆盖buf [16]之前不会抛出保护页异常?

  1. 代码中的错误

    int main()
    {
        void *ptr = 0;    
        int overrun = 1;
        ptr = malloc(overrun);
        while(overrun++)
        {
            if(!ptr)
                while(1) Sleep(500);
            *((char*)ptr + (overrun+1)) = 'a';
            printf("\n%d\n",overrun);
        }
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从visual studio 2010的项目菜单确保构建为"Release"和"x64"(机器为x64)

  3. 启用FULL PAGE HEAP

    gflags /p /enable test.exe /full
    
    Run Code Online (Sandbox Code Playgroud)
  4. 制作windbg默认调试器

    E:\installed\Debugging Tools for Windows (x64)>windbg -I
    
    Run Code Online (Sandbox Code Playgroud)
  5. cmd没有调试器的情况下将代码作为单独的exe运行

    输出:

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Run Code Online (Sandbox Code Playgroud)

    之后看到windbg抓住腐败.而且我认为整页堆可以立即捕获损坏.

    有关为什么整页堆糟透了的任何评论?

c windows heap windbg pageheap

-7
推荐指数
2
解决办法
1027
查看次数