CMake: SOVERSION и идентификатор библиотеки Mac в общей библиотеке из файлов сборки - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть небольшой проект, который создает общую библиотеку из пары файлов сборки. Я пытался следовать таким примерам, что сгенерированная библиотека

  • имеет управление версиями (libFastCompression.1.dylib на Mac или libFastCompression.so.1 в Linux)
  • имеет полный путь в качестве идентификатора на Mac

В частности, мой CMakeLists.txt имеет:

project(lzvn LANGUAGES C ASM VERSION 1.0.0)
set(lzvn_FULL_VERSION "${lzvn_VERSION_MAJOR}.${lzvn_VERSION_MINOR}.${lzvn_VERSION_PATCH}")
# snip
add_library(FastCompression SHARED lzvn_decode.S lzvn_encode.S)
set_target_properties(FastCompression PROPERTIES
    VERSION ${lzvn_FULL_VERSION_MAJOR}.${lzvn_VERSION_MINOR}
    SOVERSION ${lzvn_VERSION_MAJOR})

Это работает в проектах, которые я использовал в качестве примера, но не в этом конкретном проекте. Там я просто получаю файл libFastCompression.dylib (или .so), а на Mac идентификатор библиотеки вообще не содержит никакой информации о пути.

Я что-то упускаю / забываю, или то, что я ищу, не реализовано / не поддерживается (в CMake) для библиотек, созданных исключительно из файлов сборок?

Проект: github.com / RJVB / lzvn

Спасибо!

Рене

1 Ответ

0 голосов
/ 12 сентября 2018

Добавьте свойство LINKER_LANGUAGE к вашей цели со значением C. Это приводит к следующей команде ссылки для меня: (по крайней мере, в Ubuntu у меня нет под рукой Mac)

/usr/bin/cc -fPIC   -shared -Wl,-soname,libFastCompression.so.1 -o libFastCompression.so.4.0 CMakeFiles/FastCompression.dir/lzvn_decode.S.o CMakeFiles/FastCompression.dir/lzvn_encode.S.o
...