J'ai une bibliothèque partagée locale qui n'est pas dans $ LD_LIBRARY_PATH. Je veux exécuter mon exécutable, mais comme il ne trouve pas la bibliothèque partagée dans les dossiers système, il génère une "erreur lors du chargement des bibliothèques partagées".
Un correctif possible pour cela consiste à exporter un nouveau LD_LIBRARY_PATH contenant le dossier de la bibliothèque locale.
Comment puis-je exporter automatiquement cette variable d'environnement dans CMake?
Si votre bibliothèque partagée n'est pas construite dans le même projet CMake de votre exécutable, vous pouvez utiliser la gestion de rake CMake comme ceci:
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
Quand vous exécuterez make install
, CMake définira automatiquement le chemin d'exécution de votre exécutable vers votre bibliothèque partagée.
Si votre bibliothèque partagée est construite dans le même projet CMake, utilisez ceci:
set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
Dans ce cas, vous devez ajouter vous-même le répertoire où votre bibliothèque partagée sera installée sur le chemin d'exécution.
Pour plus d'informations, vous pouvez lire Gestion de rake CMake
Vous pouvez définir le chemin de recherche de la bibliothèque partagée au moment de l'exécution à l'aide de -rpath
option de l'éditeur de liens:
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")