在Eclipse Windows中链接OpenCV静态库

Linking OpenCV static libraries in Eclipse Windows

本文关键字:OpenCV 静态 链接 Eclipse Windows      更新时间:2023-10-16

我想创建一个可执行文件,我可以移动到另一台没有安装OpenCV的计算机上。

因此,我试图将所有需要的库静态地链接到可执行文件中(这就是它的名字,对吗?)该程序在我的本地计算机上编译得很好,但是当我将它复制到另一台计算机时,它抱怨它缺少.dll文件并且无法执行。

我使用eclipse juno和mingw作为windows 7的编译器。

我的进展到目前为止:我已经将openv buildx86mingwlib所需的库包含到项目属性中的mingw c++链接器->库。

opencv_core244.dll
opencv_highgui244.dll
opencv_imgproc244.dll

在原始文件夹中,这些被称为:

libopencv_core244.dll.a
libopencv_highgui244.dll.a
libopencv_imgproc244.dll.a

我已经把mingwc++ linker -> miscellaneous中的链接器标志设置为-static。

我一直在寻找答案,并尝试了一些不同的东西,但我真的被这个难住了。

如何强制编译器在eclipse中(在这种情况下是MinGW)将库链接为静态库,而不是像它显然做的那样动态库?

1)如果OpenCV被编译为dll,那么你不能静态链接。

2)记住当你为DLL输出编译项目时,你有一个。lib文件。这个.lib文件实际上并不是一个带有代码的静态库。编译器使用它来知道类/函数定义的DLL名称。这将在运行时需要DLL。

3)对于静态链接,您需要编译为静态库的.lib文件。在这样的编译中,只有一个输出是.lib文件。这个.lib文件可以用于静态链接,并将.lib文件中的代码添加到您的应用程序中。

4)我刚刚用VStudio编译了一个项目,这是一个只有一个功能的DLL。我得到一个DLL和一个。lib作为输出。.lib文件大小为2kb。

5)当我将相同的项目编译为静态库时,那么我只得到一个输出,即.lib文件。它的大小是133kb。

这个澄清/答案几乎晚了一年,但希望它能对你或其他遇到同样问题的人有所帮助。

虽然Pruthviraj没有清楚地解释他的答案,但他有正确的想法。默认情况下,cmake的配置文件将"BUILD_SHARED_LIBRARY"标志设置为true。创建的。a文件只是被重定向到dll文件,在程序中静态链接基本上是无用的。

最简单的方法是用cmake重建OpenCV,但要确保标志"BUILD_SHARED_LIBRARY"设置为false。如果你正在使用cmake GUI,它在Build子类别下。

新生成的make文件应该只在lib文件夹中生成静态库,并且应该在程序中正确地静态链接opencv。希望能有所帮助!