我有一个需要 OpenCV 2.4.11 才能链接的应用程序,因此在我的make
文件中,我确保使用以下链接器标志模式:
-l:libopencv_core.so.2.4.11
这个假设有多稳健?
我的具体问题是我自己的机器 Ubuntu 14.04,它默认有 v2.4.7,所以如果我只是使用,-lopencv_core
我会得到错误的版本。我使用的cv::fisheye
是 2.4.11 或更高版本的功能,而 CMakefind_package(OpenCV)
没有具有版本规范功能。
答案1
这使得它依赖于特定的包配置(相当脆弱)。它不会与较早的或之后库的版本。
如果您的应用程序需要某些特定功能(无法通过链接的成功/失败立即检查),通常的方法是编写一些初始化代码来检查库的发布版本(许多,并非所有库都有版本)函数或全局变量)。
例如,OpenCV(根据如何确定 OpenCV 版本)有这样一个函数:
printf("OpenCV: %s", cv::getBuildInformation().c_str());
进一步阅读:OpenCV 2.4.10 文档为了获取构建信息:
返回值是原始 cmake 输出,包括版本控制系统修订版、编译器版本、编译器标志、启用的模块和第三方库等。输出格式取决于目标体系结构。