具有外部库的OpenCV c ++应用程序部署

daz*_*daz 5 c++ deployment static opencv shared-libraries

我尝试过很多运气(可能是因为我没有使用正确的技术术语)。我的问题主要与链接静态库,编译和部署有关。在深入探讨之前,我的可执行文件可以在系统上正常编译;主要问题是如何将这些作为有效的解决方案部署到其他人。

我已经编写了一个使用OpenCV静态库的基本c ++图像处理exe文件(我将VC ++中的这些链接使用Project> Properties> Linker>添加其他依赖项作为标准)。我通过设置VC ++选项指向右边的包含文件进行编译...基本上,所有这些都可以正常编译。现在,我希望能够在另一台PC上部署它。我知道我需要exe +静态库的发行版...还有其他吗?

一些库依赖于使用libjpeg和libpng。我不认为这些是标准配置。另外,我将静态库的链接器路径设置为相对(例如资源/库),因此它与系统无关,因此它知道在哪里可以找到库。基本的OpenCV数据结构运行正常(例如CvPoint),但是当我尝试使用CvLoadImage加载图像时,应用程序崩溃。如果我改用标准的ifstream fopen,则可以毫无问题地打开文件(但似乎无法将其放入IplImage OpenCV图像支撑中-有人知道该怎么做吗?可能与IplImage-> imageData有关。) 。

任何帮助,非常感谢。谢谢!

Kar*_*nek 1

静态库不必(也不应该)与应用程序一起分发。静态库由链接器内置到 exe 文件中。

OpenCV 崩溃的原因是找不到 libpng/libjpeg dll。OpenCV 不会将它们链接为静态依赖项,而是在运行时使用 LoadLibrary/dlopen API。如果这些调用失败,则可能无法很好地恢复并且应用程序崩溃。如果包含 libpng/libjpeg 库,您的问题应该得到解决。

另请注意 - 某些 .lib 文件并不是真正的静态库,而只是一个薄层,它允许链接器在 DLL 中找到适当的函数并生成动态链接代码,以便程序员不必手动执行此操作。您通常会发现 .lib 文件非常小,并且您的应用程序会在 exe 启动时报告找不到 DLL 入口点。