目前,我有一个功能正常的程序,它使用OpenCV的动态链接库。但是当我将可执行文件移动到任何地方时,它都找不到dlls。
我尝试使用静态库,这样我就不必在运行程序的计算机上安装Opencv,并且一切都可以从可执行文件中运行。以下是我所采取的步骤。
1.使用CMAKE、Opencv源码和Mingw64编译静态库,使用BUILD_SHARED_LIB = OFF。这给我一系列的libopencv_xxxxx.a(我看到使用opencv和qt时出现了类似的问题,编译器标志在这些名称前面添加了“lib”,导致错误-在codeblocks中不是这种情况。)
2.将Codeblocks构建选项设置如下:
当我构建这个项目时,会出现一系列“未定义参考”的错误。
例如。
Build Messages
C:\opencv\build\x64\mingw (static)\staticlib\libopencv_core2410.a(persistence.cpp.obj):persistence.cpp:(.text_ZL12icvCloseFileP13CvFileStorage+0x5a)||undefined reference to `gzclose'|
Build Log
C:\opencv\build\x64\mingw (static)\staticlib\libopencv_core2410.a(persistence.cpp.obj):persistence.cpp:(.text_ZL12icvCloseFileP13CvFileStorage+0x5a): undefined reference to `gzclose'
如果您对这些错误有任何建议,将不胜感激。
我也在考虑,可能我是完全错误的(我的电气工程学位曾暴露于许多编程环境,但我可能忽略了一些基本的软件工程组件。)
以下是我考虑过的其他事情:
使用Visual Studios - opencv库已经预编译,目标计算机运行的是Windows系统,所以这似乎很合理 - 我尝试了一些实验,但使用Visual Studios让我感到沮丧。我正在成为一个Linux爱好者,不想浪费时间学习与Windows相关的编程。
在Codeblocks中使用Visual Studios编译器 - Codeblocks中唯一的选择是使用Visual C++ 2010 - 我似乎无法使用VC11或VC12在CodeBlocks中进行编译。此外,我看到Visual C++已安装,但似乎找不到其文件夹。(总之,我尝试了一些没有立即产生积极结果的方法)
使用安装程序 - 我没有安装程序的经验,但也许比尝试将库链接到可执行文件中更容易。我认为可以设置安装程序将所有依赖项存储在Program Files中,并在方便的位置放置可执行文件的快捷方式。这是真的吗?需要多大的难度?
手动组织一个带有依赖项的便携式文件夹。对此并没有太多经验,但也许比链接库更容易。
请随意评论其他选项或提供任何可能被忽略的解决方案。
-lrt -ldl -lz -lpthread
。 在Linux上也是一样的!(你的错误提示缺少 zlib [-lz]) - berak