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?
a très bien! unset() a fait l'affaire. Merci! – wjk
Super - je vais mettre à jour la réponse merci. – Fraser