链接到非版本共享对象库CMake

问题描述

我正在尝试将二进制链接链接到标准*.so共享对象库,这增加生成两个符号链接的难度,这些符号链接指向完全版本化的共享对象库。我看到的问题是CMake将二进制文件链接到主要版本,因为SOVERSION设置为主要版本变量。但是,如果删除SOVERSION,则不会生成中间链接*.so.2。如果可能的话,我想灵活地链接到未版本化的*.so或主要版本的*.so.2

更清楚地说,这是我的set_target_properties(名称已更改)。

 set_target_properties(
  lib
  PROPERTIES
  FRAMEWORK ON
  SOVERSION ${LIB_VERSION_MAJOR}
  VERSION ${LIB_VERSION_MAJOR}.${LIB_VERSION_MInor}.${LIB_VERSION_PATCH}
  ARCHIVE_OUTPUT_DIRECTORY "lib"
  LIBRARY_OUTPUT_DIRECTORY "lib"
  )

二进制文件上的objdump结果表明二进制文件链接到相对的主要版本。

  richard@VirtualBox:~/m2md-repo/build/work/coolpad/debug$ arm-linux-gnueabi/bin/objdump -x binary | grep "so"
  NEEDED               liblib.so.2
  NEEDED               lib_modules.so.0
  NEEDED               lib_services.so.0     

通过查看安装位置,CMake创建了库的完整major.minor.path版本以及两个符号链接

  ll _install/usr/lib | grep lib                                                                                                  
  -rw-r--r--  1 richard richard    63735 Oct 12 16:56 liblib.so.2.0.0
  lrwxrwxrwx  1 richard richard       17 Oct 12 16:57 liblib.so.2 -> liblib.so.2.0.0
  lrwxrwxrwx  1 richard richard       13 Oct 12 16:57 liblib.so -> liblib.so.2

有没有一种方法可以使CMake仅链接*.so,同时还可以创建另外两个符号链接

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)