使用系统的工具链编译出opencv(3.1.0)的so库,由于生成的so的后缀为so.x.y.z,无法打进应用包使用。
使用系统的工具链编译出opencv(3.1.0)的so库,由于生成的so的后缀为so.x.y.z,无法打进应用包使用。
在Linux系统中,共享库(也称为动态链接库或.so
文件)通常具有版本号,例如libxxx.so.3.1.0
。这些版本后缀有助于系统处理多个版本的相同库,并确保应用程序链接到正确的版本。然而,有时候你可能希望创建一个没有完整版本号的库,如libxxx.so.3
,或者只包含主版本号的库,如libxxx.so
。
如果你想使用一个带有so.x.y
类型的库,通常你的应用程序或系统会在运行时动态地查找它。你可以通过设置LD_LIBRARY_PATH
环境变量来指定库文件所在的目录,或者将库文件所在的目录添加到/etc/ld.so.conf
文件中,然后运行ldconfig
来更新链接器缓存。
关于你提到的opencv(3.1.0)
生成的so.x.y.z
库,如果无法直接用于应用包,有几种方法可以尝试:
libopencv_core.so.3.1.0
文件,你可以创建一个名为libopencv_core.so.3
的符号链接。ln -s libopencv_core.so.3.1.0 libopencv_core.so.3
.a
文件)。静态库在编译时与应用程序一起编译,因此不需要在运行时动态链接。请注意,在修改库或应用程序的链接设置时,需要确保版本兼容性。不同版本的库可能有不同的API或行为,因此确保你的应用程序与所选的库版本兼容非常重要。
当前应用的so是IDE侧打包带入的,允许应用通过 libxxx.so.x的方式提供so,如果需要同时带入两个版本的 so,real name 与 so name 名字要相同,明确到主版本号libxxx.x,不需要带上 .y.z;所以目前libxxx.so是能够使用的,libxxx.3.1以及libxxx.so.3.1.0需要改成libxxx.x的形式使用。然后需要在CMakeLists.txt文件中重新配置并编译。