Как заставить CMake не добавлять основную / вспомогательную версию в имя общей библиотеки и имя сына? - PullRequest
0 голосов
/ 30 ноября 2018

Я компилирую libclang с Cmake для Android (с Android NDK).

Вот часть конфигурации CMake, которая настраивает имя файла и имя сына:

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()

Так как я компилирую llvm / clang версии "7.0.0", имя файла libclang и имя сына - 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]

Как мне избежать добавления ".7" как в имени файла, так и в имени сына (чтобы сделать его просто libclang.so)?

Я пытался:

1) свойство комментария выглядит следующим образом:

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

, а имя файла и имя сына по какой-то причине по-прежнему ".so.7"

2) установите его пустым:

set_target_properties(libclang
  PROPERTIES
  VERSION ""
  DEFINE_SYMBOL _CINDEX_LIB_)

, а имя файла и имя сына - ".so."(с точкой в ​​конце).

Что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Благодаря @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]

Однако я не уверен, что что-то не так, поскольку я еще не пытался загрузить его.

Пожалуйста, дайте мне знать, если есть правильный способ сделать это.

0 голосов
/ 30 ноября 2018

Я не смог проверить это, но попробуйте установить свойство NO_SONAME вместо других модификаций.

set_target_properties(libclang PROPERTIES NO_SONAME 1 )

...