C++ Visual Studio 2010-创建方便的静态库OpenCv
出于学习目的,我想创建一个静态库,一个opencv中使用的lib文件的“包”,然后将其链接到我的应用程序“opencvuser”。这样做,我得到了大量的错误。(LNK2005和LNK2019) 我的设置: 项目:staticLibC++ Visual Studio 2010-创建方便的静态库OpenCv,c++,visual-studio-2010,opencv,C++,Visual Studio 2010,Opencv,出于学习目的,我想创建一个静态库,一个opencv中使用的lib文件的“包”,然后将其链接到我的应用程序“opencvuser”。这样做,我得到了大量的错误。(LNK2005和LNK2019) 我的设置: 项目:staticLib 我创建了一个没有预编译头的静态库应用程序 在library下,我将D:\OpenCV248\build\x64\vc10\staticlib作为一个附加库 目录。我已经将所有可用的.lib文件指定为附加文件 依赖项。(opencv_core248d.lib、open
- 我创建了一个没有预编译头的静态库应用程序
- 在library下,我将D:\OpenCV248\build\x64\vc10\staticlib作为一个附加库 目录。我已经将所有可用的.lib文件指定为附加文件 依赖项。(opencv_core248d.lib、opencv_imgproc248d.lib、opencv_highgui248d.lib等)
- 我已经添加了C:\OpenCV240\build\include作为一个附加的include目录
- 然后我在“属性->引用”下列出了“staticLib”
- 所有项目均为x64
- 两个项目中的运行库都设置为“多线程调试”
您收到这些链接器错误,因为您尝试使用的OpenCV库是针对CRT静态链接的。在您的项目中,您正在动态链接到CRT,这些东西不会混合在一起。我建议您不要试图创建一个包含所有OpenCV库的“包”,而只是在需要它们的地方链接到所需的特定库 但我还将向您展示如何解决您的问题:
- 您需要在不静态链接到CRT的情况下重新编译OpenCV 您可以查看OpenCV文档以了解更多信息。 运行CMake时,在按下“配置”按钮后,查找名为“使用静态CRT构建”的选项并将其禁用。然后您可以按“生成”,用VS2010打开解决方案并编译OpenCV
- 在VS2010项目中,使用以下设置: 在“opencvuser”项目配置中,在library下,需要添加其他库目录,以添加生成的.lib文件所在的路径。对我来说,它位于“c:\opencv248\mybuild\lib\Debug\”中。 在附加依赖项下,需要包含所有OpenCV库文件(OpenCV_core248d.lib等)。我还需要包括Comctl32.lib和zlibd.lib,因为如果我不这样做,我会得到一些链接器错误
- 设置项目依赖项 您还需要确保以正确的顺序构建项目(首先是opencvuser,然后是staticlib)。为此,右键单击解决方案并选择“属性”。在该窗口中,在公共属性->项目依赖项下,确保“opencvuser”不依赖于“staticlib”,但“staticlib”必须依赖于“opencvuser”
请先试试这个。为了能够为静态库编译OpenCV,需要在CMake中配置该选项,然后才能为您生成Microsoft Visual Studio解决方案文件。如果您已经生成了这些解决方案文件,那么将它们更改为静态构建将是一件很麻烦的事情。我真的不明白,我已经在使用OPENCV的静态预构建库将其嵌入到我的自定义静态库中。或者你的意思不同?根据我的理解,您首先尝试编译包含所有OpenCV库文件的staticLib,尝试只获取一个静态库。然后尝试引用该文件并使用OpenCV函数。我说得对吗?没错。首先感谢你的详细回复。我把所有的步骤都做了好几次,一次又一次地检查每一点,但是在构建最终的应用程序(staticLib)时,我得到了错误**错误LNK2019:未解析的外部符号uuu imp_CreateToolbarEx在函数“int u cdecl icvCreateTrackbar…”中引用(顺便说一句,我的staticLib在您的示例中是opencvuser…,但我注意到了这一点。)。有什么建议吗?CreateToolbarEx位于Comctl32.lib中。您确定在其他依赖项中包含了Comctl32.lib吗?(它应该位于所有opencv.lib文件的旁边)。如果删除comctl32.lib,我也会遇到同样的错误。这是添加的,可能是因为我的目标平台是x64?是的,这可能是原因。我在32位上编译了我的版本,而不是64位。我需要进一步调查……我刚刚编译了OpenCV o