wki*_*ing 2 c++ opencv shared-libraries
安装Opencv 2.4.9之后,我发现它在/ usr / local / lib中创建了许多符号链接。说,对于libopencv_core.so.2.4.9,当我使用时ls -l
,它显示
...
libopencv_core.so -> libopencv_core.so.2.4
libopencv_core.so.2.4 -> libopencv_core.so.2.4.9
libopencv_core.so.2.4.9
...
Run Code Online (Sandbox Code Playgroud)
我的问题是,由于它已经将真正的共享库libopencv_core.so.2.4.9放在/ usr / lcoal / lib中,为什么还要麻烦地创建指向它的符号链接,甚至是创建指向该符号链接的符号链接?
将真正的共享库放在其他位置并在/ usr / local / lib中建立到它们的符号链接是否更好?
第二个libopencv_core.so.2.4(别名为“ soname”)和第三个libopencv_core.so.2.4.9(别名为“实名”)文件是允许您更新库(在这种情况下为OpenCV)并且仍支持程序的文件。想要使用这些库的旧版本。
$ ldd a.out
libopencv_core.so.2.4 => /path/to/lib/libopencv_core.so.2.4
运行ldd
,您可以看到可执行文件未链接到“实名”库?原因:用于处理库升级。考虑两种情况。
ldconfig
)可以更新现有的“ soname”链接(例如libopencv_core.so.2.4)以指向较新的“真实名称”库(例如libopencv_core.so.2.4.10)和我们更旧的可执行文件现在将加载升级的库。关于,第一个符号链接libopencv_core.so(别名“链接器名称”)仅用于链接器。对于像的标志-lopencv_core
,gcc 在库名称前添加a lib
并在其后缀a .so
并进行搜索。因此,它需要一个名称为libopencv_core.so的文件,因此需要第一个符号链接。在程序运行时永远不会使用它。另外,如果愿意将“ soname”链接作为gcc命令行参数而不是-lopencv_core
,则将不再需要此软链接。
更好的解释在这里(1)。
归档时间: |
|
查看次数: |
1176 次 |
最近记录: |