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