Quel est L'équivalent de "gcc-fvisibility=hidden" pour contrôler le symbole exporté d'une bibliothèque partagée?
j'ai développé des logiciels multiplateformes en c++. Comme je le sais, Linux .donc exporté tous les symboles par défaut, bien à travers "gcc -fvisibility=hidden"
je peux mettre tous les symboles exportés comme cachés, puis définissez __attribute__(visibility("default"))
pour la classe et la fonction que je veux exporter, donc je peux contrôler ce que je veux exporter.
ma question Est, en utilisant CMake, Comment puis-je faire le travail en tant que contrôle "gcc-fvisibility=hidden"?
2 réponses
au lieu de définir directement les options du compilateur, vous devriez utiliser la version actuelle de CMake et le
set_target_properties(MyTarget PROPERTIES CXX_VISIBILITY_PRESET hidden)
pour limiter le paramètre à une bibliothèque spécifique, ou exécutable cible. Si vous utilisez C juste remplacer CXX par C desdites commandes. Vous pouvez également vouloir enquêter sur le VISIBLITY_INLINES_HIDDEN bien ainsi.
GENERATE_EXPORT_HEADER comprend d'autres conseils et exemples relatifs aux deux propriétés.
vous pouvez ajouter un drapeau au compilateur Cmake comme ceci:
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
pour vous assurer que cela n'est fait que sous Linux, vous pouvez utiliser ce code:
IF(UNIX)
IF(CMAKE_COMPILER_IS_GNUCC)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
ENDIF(UNIX)