2016-06-07 3 views
0

У меня есть внешняя библиотека из проекта, над которым я работал, который был скомпилирован против boost 1.55; Я перешел на другой проект, который должен использовать эту библиотеку, но в текущей системе используется boost 1.58.Внешняя библиотека Проблемы с улучшенной версией

Когда я связываюсь с библиотекой, он жалуется, что у него отсутствуют ссылки для boost 1.55. Библиотека Я связыванние была составлена ​​с использованием следующей find_package команды:

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

Я знаю, что есть мин команды для CMake, но я не уверен, если это позволит мне использовать библиотеку, которая была составлена ​​против повышения 1.55 на машине в настоящее время 1.58.

Любые советы о том, как скомпилировать эту внешнюю библиотеку, чтобы она использовала любую версию повышения, совместимую с . 1.55 был бы очень благодарен!

команда find_package для новой программы пытаются найти импульс):

find_package(Boost 1.55 COMPONENTS system filesystem chrono regex thread date_time REQUIRED) 

Система новая программа на еще повысить 1,58 не 1.55, так что выводит следующее:

-- Boost version: 1.58.0 
-- Found the following Boost libraries: 
-- system 
-- filesystem 
-- chrono 
-- regex 
-- thread 
-- date_time 
-- atomic 

Компиляция работает отлично против 1,58, только когда новая программа связана с библиотекой (составленной против 1.55), и она жалуется на то, что не сможет найти e boost 1.55 (см. ниже).

Связывание выхода: (новая программа сшивание к библиотеке)

/usr/bin/ld: warning: libboost_system.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_filesystem.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_chrono.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_regex.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_thread.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_date_time.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
+0

У вас действительно проблема? Это сообщение. –

+0

Я обновил вопрос, надеюсь, сделать его более ясным. – badrobit

ответ

1
find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

будет удовлетворен, если его найдет любую версию Boost,> = 1,55.

find_package(Boost 1.55 EXACT COMPONENTS ... REQUIRED) 

удовлетворено только с помощью Boost 1.55.

Поэтому, если вы просто перестраиваете библиотеку с теми же CMakeLists в присутствии Boost 1.58, это должно быть хорошо.

Позже

Я пытаюсь придумать метод, который я могу скомпилировать библиотеку один раз (скажем, используя подталкивание 1,55) таким образом, чтобы, если на другой системе, которая работает в новая версия boost say 1.58; не будет жаловаться на то, что у него не будет библиотеки с добавлением 1,55 , если она имеет 1.58 версия библиотеки наддува доступных

Вы не можете сделать это:

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

позволит вам построить библиотеку с повышением 1,55 или позже но библиотека вы строите будет быть динамически связан с установленной версией , и что динамическая связь выпекается в двоичный файл в виде информации для загрузчика ОС.

Так что, если вы возьмете эту библиотеку в какую-то систему, где boost 1.55 отсутствует , вы получите ошибки связи, которые вы видели, когда пытаетесь связать библиотеку с чем-либо еще.

К сожалению, вам нужно будет построить эту библиотеку в присутствии boost 1.58 , чтобы связать ее с чем-либо в системе, которая находится под усилением 1.58.

+0

Вот что я подумал, но я использовал первую директиву CMake для первой библиотеки (тот, что связан с ** 1.55 **), но затем на другой машине я пытаюсь установить связь с ** 1.58 **, и она жалуется на не имеющих библиотек ** 1.55 **. Мне также нужны библиотеки ** 1.58 ** с исходной библиотекой? – badrobit

+0

@badrobit Извините, я не понимаю, что :( –

+0

Я пытаюсь придумать метод, который я могу скомпилировать библиотеку один раз (скажем, используя boost 1.55) таким образом, чтобы если на другой системе, которая запускает новую версия boost, скажем, 1.58, не будет жаловаться на то, что у вас не будет библиотеки расширения 1.55, если у нее есть версия доступных библиотек boost. Версия: – badrobit

Смежные вопросы