首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将静态openCV库与Visual Studio和QT Creator链接时出现LNK2005错误

将静态openCV库与Visual Studio和QT Creator链接时出现LNK2005错误
EN

Stack Overflow用户
提问于 2012-03-14 16:03:07
回答 3查看 8.8K关注 0票数 6

我构建了静态openCV 2.3库。我的项目目前使用动态库,没有问题,但现在我想使用静态库。我将库添加到我的.pro文件中:

代码语言:javascript
复制
LIBS += "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_calib3d231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_contrib231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_core231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_features2d231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_flann231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_gpu231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_haartraining_engine.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_highgui231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_imgproc231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_legacy231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ml231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_objdetect231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ts231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_video231.lib"

并包含目录:

代码语言:javascript
复制
INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include"
INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include\opencv"

当我尝试构建时,我得到了以下错误:

代码语言:javascript
复制
LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRT.lib(MSVCR100.dll)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

如有任何帮助或建议,非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 15:38:07

在CMake上,当构建openCV静态库时,除了取消选中BUILD_SHARED_LIBS之外,我还取消选中了BUILD_WITH_STATIC_CRT,这就解决了这个特定的问题

票数 9
EN

Stack Overflow用户

发布于 2012-11-21 03:13:15

确保项目属性->配置属性->c/c++>代码生成:运行时库是多线程(/MT)

票数 5
EN

Stack Overflow用户

发布于 2012-03-14 16:18:36

问题似乎是您的链接器试图将不同的、不兼容的Visual C++运行时库(CRT)版本组合成一个单独的二进制文件。

让我猜测一下:项目的每个部分和您链接的库都不是使用Visual C++中相同的代码生成选项生成的。

我想知道/NODEFAULTLIB交换机是否能解决这个挑战?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9697935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档