.so.xyz 存在的可能性有多大?

.so.xyz 存在的可能性有多大?

我有一个需要 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 输出,包括版本控制系统修订版、编译器版本、编译器标志、启用的模块和第三方库等。输出格式取决于目标体系结构。

相关内容