在Eclipse Windows中链接OpenCV静态库
Linking OpenCV static libraries in Eclipse Windows
我想创建一个可执行文件,我可以移动到另一台没有安装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。希望能有所帮助!
- 如何在 docker 中使用静态 opencv 库编译 c++ 应用程序
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- 如何使用cmake设置OpenCV以启用动态和静态构建
- OpenCV噪声消除静态摄像机的视频
- 尽管有静态链接,Opencv 3.2.0 .dll丢失
- Android Studio 2.2链接OPENCV静态库
- 在Windows上运行的Eclipse上静态链接OpenCV
- openCV 243 使用静态库错误LNK2019
- 静态 opencv 在 Arm Linux busybox 上找不到 USB 网络摄像头
- 使用 TDM-GCC-64、Cmake 和 CodeBlock 在 Windows 8 中构建 OpenCV 静态库时出
- Ubuntu上的OpenCv静态编译
- 将 opencv 捆绑为静态库会提供数千个未定义的引用
- 使用多线程调试 DLL (/MDd) C 运行时库生成静态 Opencv 库
- 调用静态 opencv 库
- 如何将 OpenCV 2.4 静态库与 Visual Studio 配合使用
- Android Studio链接OpenCV静态库
- Opencv静态链接给出错误
- 减少与opencv静态链接的可执行文件的大小
- 在Eclipse Windows中链接OpenCV静态库
- ARM的Opencv静态库链接错误