2013-04-28 3 views
4

J'essaye de lier une bibliothèque partagée sous Windows en utilisant CMake. Cette bibliothèque partagée a été compilée avec Clang, et en tant que tel, je dois utiliser GNU ld pour que les symboles de débogage soient correctement propagés (comme Microsoft link.exe ne connaît rien aux symboles de débogage de style GNU). Ma bibliothèque partagée dépend des bibliothèques d'importation pour kernel32.dll et msvcrt.dll. J'ai les bibliothèques d'importation de style GNU dans le cadre d'une installation w32api.Noms de bibliothèques tronqués

Toutefois, lorsque je spécifie les noms de bibliothèque d'importation dans l'appel target_link_libraries(), les noms sont tronqués de sorte que target_link_libraries(${my_target} kernel32) devient -lkernel32.lib sur la ligne de commande. Cependant, le nom de la bibliothèque d'importation kernel32 est libkernel32.a, et non libkernel32.lib.a, et en tant que tel, le lien échoue. Je soupçonne que c'est parce que ma copie de Clang par défaut à l'aide de Microsoft link.exe, et j'ai mis CMAKE_CXX_CREATE_SHARED_LIBRARY pour remplacer ce comportement. Si c'est le cas, je devrai probablement recompiler Clang (et espérer que je n'obtiens pas le même comportement dans la nouvelle copie).

EDIT: Clang n'est pas en cause. J'ai reconstruit Clang à partir de zéro, seulement pour trouver que le suffixe .lib est toujours cloué automatiquement. Je sais que c'est la faute de CMake maintenant. Qu'est-ce que je fais mal?

Répondre

3

Vous pouvez essayer de modifier la variable CMAKE_LINK_LIBRARY_SUFFIX:

unset(CMAKE_LINK_LIBRARY_SUFFIX) 
target_link_libraries(${my_target} kernel32) 
+1

a très bien! unset() a fait l'affaire. Merci! – wjk

+0

Super - je vais mettre à jour la réponse merci. – Fraser

Questions connexes