代码之家  ›  专栏  ›  技术社区  ›  4ntoine

如何强制CMake在共享库文件名和soname中不添加主要/次要版本?

  •  0
  • 4ntoine  · 技术社区  · 7 年前

    利勃朗 使用Cmake for Android(使用Android NDK)。

    set_target_properties(libclang
        PROPERTIES
        VERSION ${LIBCLANG_LIBRARY_VERSION}
        DEFINE_SYMBOL _CINDEX_LIB_)
    

    set(LIBCLANG_LIBRARY_VERSION
        "${CLANG_VERSION_MAJOR}" CACHE STRING
        "Major version number that will be appended to the libclang library")
    

    if(NOT DEFINED CLANG_VERSION_MAJOR)
      set(CLANG_VERSION_MAJOR ${LLVM_VERSION_MAJOR})
    endif()
    

    libclang.so.7 这不是Android所需要的。

    ~/llvm/build anton$ls -l lib/libclang.so
    lrwxrwxrwx 1 anton anton 13 Nov 30 12:13 lib/libclang.so -> libclang.so.7
    ~/llvm/build anton$arm-linux-androideabi-readelf --dynamic lib/libclang.so.7 | grep SONAME
     0x0000000e (SONAME)                     Library soname: [libclang.so.7]
    

    libclang.so )?

    1) 注释属性,如下所示:

    set_target_properties(libclang
      PROPERTIES
      #VERSION ${LIBCLANG_LIBRARY_VERSION}
      DEFINE_SYMBOL _CINDEX_LIB_)
    

    由于某种原因,文件名和soname仍然是“.so.7”

    2) 将其设置为空:

    set_target_properties(libclang
      PROPERTIES
      VERSION ""
      DEFINE_SYMBOL _CINDEX_LIB_)
    

    文件名和soname是“.so.”(末尾有点)。

    我能做什么?

    2 回复  |  直到 7 年前
        1
  •  3
  •   YSC    6 年前

    我无法测试这一点,但尝试设置NO_SONAME属性,而不是其他修改。

    set_target_properties(libclang
      PROPERTIES NO_SONAME 1
    )
    
        2
  •  2
  •   4ntoine    7 年前

    多亏了@Fred,我才得以通过以下(非常肮脏的伎俩)获得它:

    set_target_properties(libclang
      PROPERTIES
      #VERSION ${LIBCLANG_LIBRARY_VERSION}
      SUFFIX ""
      VERSION "so"
      SOVERSION "so"
      DEFINE_SYMBOL _CINDEX_LIB_)
    

    ~/llvm/build anton$ls -l lib/libclang.so
    -rwxrwxr-x 1 anton anton 33590456 Nov 30 12:54 lib/libclang.so
    ~/llvm/build anton$arm-linux-androideabi-readelf --dynamic lib/libclang.so | grep SONAME
     0x0000000e (SONAME)                     Library soname: [libclang.so]
    

    但是我不确定smth是否错误,因为我还没有尝试加载它。

    如果有合适的方法,请告诉我。

    推荐文章