Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Visual Studio 2013中使用Qt和OpenCV创建应用程序链接问题_C++_Qt_Opencv_Visual Studio 2013 - Fatal编程技术网

C++ 在Visual Studio 2013中使用Qt和OpenCV创建应用程序链接问题

C++ 在Visual Studio 2013中使用Qt和OpenCV创建应用程序链接问题,c++,qt,opencv,visual-studio-2013,C++,Qt,Opencv,Visual Studio 2013,我正在做一个由几个模块(总共5个)组成的项目。我需要一个独立版本的这些,以便他们可以进行测试(他们是处理步骤)。我还需要一个版本,结合他们所有的一个程序。对于独立测试,它们都有一些额外的主文件和IO,用于从其他模块读取输入/写入输出(完整的应用程序通常不需要这些)。所有模块都运行正常 现在的问题是,模块2-5需要OpenCV进行处理,模块1需要Qt进行视觉处理。 我尝试将2-5包含在1中(因此1也需要opencv),因此我将它们放在该项目的项目文件夹中,结构如下所示: M1 - QtTe

我正在做一个由几个模块(总共5个)组成的项目。我需要一个独立版本的这些,以便他们可以进行测试(他们是处理步骤)。我还需要一个版本,结合他们所有的一个程序。对于独立测试,它们都有一些额外的主文件和IO,用于从其他模块读取输入/写入输出(完整的应用程序通常不需要这些)。所有模块都运行正常

现在的问题是,模块2-5需要OpenCV进行处理,模块1需要Qt进行视觉处理。 我尝试将2-5包含在1中(因此1也需要opencv),因此我将它们放在该项目的项目文件夹中,结构如下所示:

M1
    - QtTest        // this is actually M1, I didn't manage to rename that yet
        - Debug
        - GeneratedFiles
        - M2        // M2-5 contain the .h and .cpp of the respective M
        - M3
        - M4
        - M5        // this one also has a portable blender, a folder with a model and a folder with python scripts
        - OpenCV
            - build
                - include
                    - opencv2           // with all the files of opencv
                - x64
                    - vc12              // for now, only one of those when working correctly
                        - bin           // dll
                        - lib           // compact .lib
                        - staticlib     // single .libs'
        - Output
        - Resources
        - x64
        - [All the .h, .cpp, .props. etc. for M1]
    - Win32 
    - x64
    - QtTest.sdf
    - QtTest.sln
现在,我正在使用
VisualStudio2013
Qt5.4
以及
Opencv3
。我想在应用程序中包括OpenCV 虽然由于大小和方便的原因,用户不必安装Opencv(也不需要环境变量),但我也需要包含blender(只是作为便携文件夹)。 (这是一个研究项目。)

我对M2-5和OpenCV有其他类似的依赖项(两个新的x64道具表,一个用于OpenCV和所有模块):
C/C++>常规>其他包括:

  • $(SolutionDir)QtTest\M2
  • $(SolutionDir)QtTest\M3
  • $(SolutionDir)QtTest\M4
  • $(SolutionDir)QtTest\M5
  • $(SolutionDir)QtTest\OpenCV\build\include
链接器>常规>附加库:

  • $(SolutionDir)QtTest\OpenCV\build\x64\vc12\与bin、lib或 或staticlib
链接器>输入>其他依赖项(取决于bin、lib或staticlib):

  • opencv_world300d.dll

  • opencv_world300d.lib

  • staticlib中的所有.lib文件

对于这两张表,我都在
MTd
(lib和staticlib)和
MDd
(bin)之间切换了
Codegeneration
。这个项目本身也有关系

我现在收到大量链接器错误

  • LNK2038:RunrimeLibrary->MDd_DynamicDebug和MTd_StaticDebug// 这与一些东西(libs)是dll和一些lib有关
  • LNK2005:已定义,msvcprtd.lib(MSVCR120D.dll)中的条目和 msvcprtd.lib(MSVCP120D.dll)与冲突 LIBCMTD.lib(typeinfo.obj)和 libcpmtd.lib(stdthrow.obj/xtrow.obj/syserror.obj)
  • LNK4098(警告):msvcrtd.lib与其他文件冲突,应使用 /NODEFAULTLIB
  • LNK2019:未解析的外部符号(24个错误),全部为函数 来自模块2-5
我如何设置这个?最好我只想要
bin
lib
,因为
staticlib
也相当大


(如果需要,我可以提供更多信息。)

好的,我在那里犯了一些错误。 不需要为模块文件夹放置include。将所有内容调整为dll(MDd/MD、vc12/lib、opencv_ts300(d).dll+opencv_world300(d).dll),从而修复了链接错误等


随后出现了一个错误,
matchTemplate(…)
的无入口点错误。我换了一个更新版本的opencv(有一个早期版本,alpha或beta)。3.1正在运行,可能会进入3.0稳定版。

哇,真是一团糟。“我想在应用程序中包含OpenCV”的确切含义是什么?为什么目录结构如此复杂?代码内部的第三方二进制文件、嵌套的代码目录、内部混合的编译输出等等。您似乎还在一个构建中混合调试和发布lib,导致所有这些运行时冲突。看看openCV是如何组织的,以获得一些灵感。在这个规模的项目中,我建议使用CMake生成解决方案。好的,应用程序应该拍摄一张图像,进行一些分析,然后在此基础上修改一个3d模型。在这方面有几个步骤,它们需要可测试,所以它们是作为单独的模块(5)制作的。模块2+3(主要)使用OpenCV进行分析,模块1是使用Qt制作的GUI。显然,用户不方便一个接一个地运行这些模块,所以它们应该组合在一个单独的模块中。第一个似乎是包含其他版本的最佳选择。对于OpenCV,我实际上也将调试库用于发布版本(尽管它目前仅用于调试),因为发布版本存在一些问题(不太记得了,但是它们像是a级的,所以建议使用调试版本来避免这个问题).我不是说你想要模块化它的方式,这是有意义的。我是说源代码树的组织。--我假设M2..M5是你链接到M1的库?或者你只是直接将这些模块中的所有.c和.h文件添加到M1中?--现在,这里没有足够的信息来告诉你到底在做什么ng在那里。我们需要查看整个解决方案和项目设置,特别是你链接的库。啊,是的,这些文件夹只包含.h和.cpp,就像我在文件夹结构中所评论的那样。这基本上只是用于组织。M2-5或无labraries。