(вкратце)
Добавьте следующую строку в ваш CMakeLists.txt, перед строкой add_executable :
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
(не вкратце)
Ваша проблема в обработке rpath.По умолчанию на этапе компоновки cmake инициирует размещение всех автоматически обнаруженных папок со связанными библиотеками непосредственно в исполняемую программу, используя параметр компоновщика -rpath .
(при условии, что вы используете генератор "Unix Makefiles"), если вы начнете компиляцию / ссылку с
make VERBOSE=1
во время фазы соединения, вы увидите что-то вроде
g++ [lot of everything] -Wl,-rpath,/home/vtd/DEV_JOHANN/ZEROMQ/INSTALL/lib64
это означает, что при запуске вашего исполняемого файла компоновщик во время выполнения сначала ищет в папке /home/vtd/DEV_JOHANN/ZEROMQ/INSTALL/lib64
, а затем ищет $ LD_LIBRARY_PATH.Это позволяет вашей программе нормально запускаться перед установкой.
Во время установки, как часть процесса установки, эта информация извлекается из исполняемого файла, и она больше не может найти вашу библиотеку.Вы можете определить, что просматривается в процессе установки.Найдите следующее:
-- Installing: /usr/local/bin/QSample
-- Set runtime path of "/usr/local/bin/QSample" to ""
Пустые кавычки в конце означают, что rpath удален.
Одним из решений является добавление вашей папки lib в LD_LIBRARY_PATH, например:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/vtd/DEV_JOHANN/ZEROMQ/INSTALL/lib64 ./QSample
или:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/vtd/DEV_JOHANN/ZEROMQ/INSTALL/lib64
./QSample
Другое решение - дать CMAKE команду не удалять данные rpath.Просто добавьте следующую строку в ваш CMakeLists.txt перед строкой add_executable :
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
Эта ссылка очень подробно объясняет обработку rpath в cmake:
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling