Comment convertir plusieurs fichiers source en un fichier .a

Je viens de découvrir que Code Blocks (et le compilateur MingW) ne prennent que des fichiers de bibliothèque .a plutôt que .lib. Quel est le moyen le plus simple de convertir .lib en fichiers .a … tout tutoriel, etc. serait apprécié. Modifier, permettez-moi de modifier légèrement ma question: comment convertir de nombreux fichiers sources en un seul fichier d’archive.

Le .lib (et .a aussi) fonctionne sous deux capacités différentes:

  • En tant que bibliothèque d’importation pour une DLL partagée dont dépend votre programme.
  • En tant que bibliothèque d’archives créée à partir d’un ou plusieurs fichiers object compilés à partir des sources.

Vous n’avez pas vraiment spécifié dans votre question le formulaire avec lequel vous travaillez. Si vous souhaitez utiliser le second formulaire, vous devrez créer le code source sous gcc sous la forme d’une bibliothèque statique, comme suggéré par Persson, car le format de bibliothèque utilisé par les outils msvc n’est pas compatible.

Cependant, il y a de bonnes nouvelles si vous travaillez avec le premier formulaire. Le portage de gcc de MinGW devrait pouvoir fonctionner de manière transparente avec une bibliothèque d’importation au format coff créée avec les outils de développement msvc. Ce que vous pouvez faire, c’est simplement renommer l’importation *.lib en lib*.a et simplement le transmettre à l’éditeur de liens, comme s’il s’agissait de n’importe quel autre fichier *.a . L’éditeur de liens devrait être capable de sortinger son format réel.

J’ai testé cela sous tdm-gcc-4.5.2 avec la dernière version nocturne de codeblocks et cela semble fonctionner correctement.

Edit: Fusion de mon commentaire dans le cadre de la réponse. Si vous travaillez avec le second formulaire et que vous devez créer une bibliothèque statique à partir du source, procédez comme suit:

S’il existe un projet msvc existant, vous pouvez l’utiliser comme sharepoint départ en l’important dans codeblocks. Ce sera sous Fichier-> Importer un projet-> Visual Studio etc.

S’il n’y en a pas, créer un nouveau projet C :: B à partir de rien n’est pas trop difficile. Allez juste Fichier-> Nouveau-> Projet sélectionnez ” Bibliothèque statique ” comme type de projet puis ajoutez le fichier source nécessaire. Si la bibliothèque est écrite dans une matière semi-portable, elle devrait être compilée sans trop de problèmes.

Pour répondre à la question spécifique, comment convertir plusieurs fichiers source en un seul fichier d’archive pour une liaison statique; c’est une opération en deux étapes. Vous devez d’abord comstackr les fichiers source en fichiers objects, puis transformer les fichiers objects en une archive.

Si vous avez MSYS avec votre installation MinGW, je vous recommande de l’utiliser. Sinon, vous pouvez toujours utiliser l’invite de commande de Windows, cmd.exe.

Assurez-vous que votre répertoire MinGW / bin fait partie de la variable d’environnement PATH afin de pouvoir appeler le compilateur de n’importe où.

A partir de la ligne de commande, accédez au répertoire contenant le code source. De là, tapez la commande

 mingw32-gcc -O2 -c [files] -I[header directory] 

Vous devez nommer les [files] spécifiquement, -c a.cpp b.cpp c.cpp ou vous pouvez tous les identifier avec *.cpp . [header directory] est l’endroit où se trouvent les fichiers .h pour la source, par rapport à vous. Généralement, les fichiers source se trouveront dans un répertoire appelé / src, et les fichiers d’en-tête dans un répertoire jumeau appelé / include. Vous vous référiez à ce répertoire sous le nom -I../include . Si les fichiers d’en-tête se trouvent dans un répertoire appelé / include dans le répertoire / src, il -Iinclude .

Une fois que vous avez généré les fichiers .o, vous tapez la commande

 ar rcs lib[something].a [files] 

Remplacez [something] par le nom de la bibliothèque. C’est le nom qui ira dans la boîte de dialog Lier les bibliothèques dans Code :: Blocks. Fichiers correspond au nom des fichiers object que vous avez créés précédemment (ao, bo, co) ou, s’il n’y a pas de fichiers object non liés dans le répertoire, vous pouvez *.o .

Cela devrait entraîner la création du fichier archive dans le répertoire. Vous pouvez maintenant le placer dans le répertoire approprié (éventuellement un répertoire soeur pour / include appelé / lib) et append ce répertoire à votre configuration Code :: Blocks, sous Répertoires de recherche de l’éditeur de liens. Vous devez alors vous rappeler d’append réellement la bibliothèque pour votre projet.

MinGW peut utiliser des fichiers .LIB. Les liens suivants vers un fichier .LIB créé avec le compilateur MS:

 gcc bc a.lib 

Dans les blocs de code, vous ajoutez la bibliothèque dans la boîte de dialog Project|Build Options... , puis accédez à l’onglet Linker Setting de l’ Linker Setting Link Libraries et ajoutez-le à la zone Link Libraries .