2017-02-09 3 views
0

У меня две версии одной и той же библиотеки libabc.so, мне нужно связать мою программу с одной версией и загрузить другую версию, когда она будет выполнена (загрузчик должен загрузить другую библиотеку при запуске исполняемого файла).разные пути ссылок и загрузки библиотеки с использованием cmake

Я размещаю две версии в разных дорожках, как я могу указать, что с помощью cmake?

Надеюсь, я ясно дал понять, спасибо.

+1

'загрузить другую версию, когда это executed.' - вы имеете в виду, что ** ** погрузчиком ли следует загружать * другую * библиотеку при запуске исполняемого файла? Не уверен, что CMake может помочь в этом * в общем виде *. Но если оба файла библиотек имеют ** одинаковые имена **, но в разных местах, то вы можете настроить RPATH для достижения этого. BTW, '.o' файл обычно является ** объектным файлом **, а не * библиотекой *. – Tsyvarev

+0

@ Цыварев благодарит вас за то, что я новичок на C++, и я считаю, что вы правы: «загрузчик должен загружать другую библиотеку при запуске исполняемого файла», и да, они имеют одинаковое имя, а '.o' - Опечатка, спасибо! – dontloo

+1

Тогда вы, вероятно, захотите прочитать о [RPATH обработке в CMake] (https://cmake.org/Wiki/CMake_RPATH_handling). – Tsyvarev

ответ

0

@ Замечания Цыварева в основном дают ответ, вот немного более подробно.

Say две версии для связи и нагрузки расположены в link_path/libabc.so и load_path/libabc.so, то CMakeLists.txt должен быть как

... 
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) 
set(CMAKE_INSTALL_RPATH load_path;${CMAKE_INSTALL_RPATH}) # load path 

... 
target_link_libraries(xxx link_path/libabc.so) # link path 
Смежные вопросы