Problème:
J'ai des difficultés à lier glibcc/glibc ++ dans une bibliothèque partagée en utilisant CMake et GCC4.9 sur mon installation Ubuntu 16.04.
Conditions supplémentaires:
Le chargement de la bibliothèque partagée pose un problème dans l'environnement de production de Red Hat (où je le copie), je crois parce qu'il utilise une version libstc ++ différente (erreur: GLIBCXX_3_4_20 introuvable). Je n'ai pas de droits Sudo et ne peux pas mettre à niveau la machine.
Comme je l'ai dérivé de this blog, this post , j'ai essayé de lier la liaison statique contre libgcc et libgc ++ en utilisant:
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
et vieillir en utilisant
set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
Mais ça ne marche pas. Ce que fonctionne est ce script CMake:
add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)
Ce doit être la mauvaise façon de procéder, à ma connaissance -static-libgcc et -static-libstdc ++ sont des options de l'éditeur de liens et non des bibliothèques ...
Question : Comment puis-je établir une liaison statique avec -libgcc et -libstdc ++ correctement?
Merci d'avance!
Oui, target_link_libraries
est un moyen correct de définir les indicateurs de l'éditeur de liens ou les options de l'éditeur de liens.
Documentation de target_link_libraries
:
Spécifiez les bibliothèques ou les indicateurs à utiliser lors de la liaison d'une cible donnée.
Les noms d'élément commençant par -, mais pas -l ou -framework, sont traités comme des indicateurs de l'éditeur de liens.
https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (emphase pas dans l'original)