Как создать «автономную» статическую библиотеку? - PullRequest
1 голос
/ 05 июля 2011

Я разрабатываю фреймворк в форме разделяемой библиотеки (в Linux). Пользователь запросил статическую версию библиотеки. Я использую cmake и поэтому просто переключил BUILD_SHARED_LIBS на OFF. Я получил статическую библиотеку, как и ожидалось.

Тем не менее, пользователь пожаловался, что теперь он должен ссылаться на boost и hdf5, которые являются зависимостями моей библиотеки.

Как вы думаете, я должен принять меры, чтобы избежать этой ситуации? Или это нормально? Можно ли когда-нибудь предоставить библиотеку, которая не имеет зависимостей?

РЕДАКТИРОВАТЬ: Должен ли я делать что-то вроде извлечения объектных файлов из статических библиотек boost и hdf5 и добавлять их при сборке своих собственных?

1 Ответ

3 голосов
/ 05 июля 2011

Решение для повышения:

set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_STATIC_RUNTIME ON) # it may help
find_package(Boost REQUIRED ...)

Для hdf5 вы можете попробовать что-то вроде этого.

  1. Найти статическую библиотеку HDF с помощью FIND_LIBRARY
  2. Скопируйте статическую библиотеку в каталог в вашем дереве сборки с помощью

    EXEC_PROGRAM( ${CMAKE_COMMAND} -E copy_if_different ${HDF_LIB} ${PROJECT_BINARY_DIR}/HDFStaticLib)

  3. Сначала добавьте каталог ссылок для HDFStaticLib с

    LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/HDFStaticLib)

  4. Добавьте библиотеку так:

    TARGET_LINK_LIBRARIES(foo ${PROJECT_BINARY_DIR}/HDFStaticLib/HDF)

Еще одна вещь: вы должны были переименовать API.a в libAPI.a, если имя файла не начинается с lib.

...