2011-01-09 3 views
0

J'essaye de créer un projet en tant que bibliothèque partagée dans OS X en utilisant CMake 2.8 et gcc 4.6 (de macports). Lorsque CMake arrive au point de relier ma bibliothèque en .dylib, je reçois l'erreur suivante de gcc:CMake/GCC "option non reconnue" sur Mac OS X

g++ -dynamiclib -headerpad_max_install_names -o libmycoollibrary.dylib etc... 
g++: error: unrecognized option '-h' 
make[2]: *** [libnrtCore.dylib] Error 1 
make[1]: *** [CMakeFiles/nrtCore.dir/all] Error 2 
make: *** [all] Error 2 

Ce -headerpad_max_install_names semble être le problème, mais je ne l'ai jamais vu auparavant. Est-ce que quelqu'un sait comment obtenir CMake pour ne pas inclure cette option, ou pour que GCC accepte cette option?

Répondre

1

Vous pouvez recréer cmake pour résoudre ce problème - il semble générer du code pour la version XCode/Darwin de g ++ (une version spéciale de 4.2), qui accepte un certain nombre d'indicateurs de liens non standard.

Il vous suffit de modifier les fichiers Modules/Platform/Darwin * .cmake et de les reconstruire. Les lignes de coupure ressemblent à ceci:

SET(CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first -headerpad_max_install_names") 
+0

Malheureusement, je dois utiliser gcc 4.6 car j'ai besoin de la prise en charge des toutes dernières fonctionnalités C++ 0x. – rcv

+2

On dirait que vous devrez reconstruire cmake; le fichier à modifier est Darwin.cmake. La ligne du coupable est SET (CMAKE_CXX_LINK_FLAGS "-Wl, -search_paths_first -headerpad_max_install_names") – EmeryBerger

+0

Cela a fonctionné parfaitement, merci. Pourriez-vous modifier votre réponse pour refléter votre commentaire afin que je puisse l'accepter? Notez également que le simple fait de changer Darwin.cmake n'a pas fonctionné - j'ai dû changer tous les fichiers Modules/Platform/Darwin * pour que cela fonctionne. – rcv