2010-05-08 4 views
0

Mon exécutable a besoin de zlib1.dll pour fonctionner,Comment fusionner zlib1.dll dans mon exécutable en C?

et je dois les garder ensemble de temps en temps.

Comment puis-je le fusionner dans l'exécutable pour sauver le problème? J'utilise cmake pour construire l'exécutable.

MISE À JOUR

zlib1.dll ne sont pas inclus directement par mon programe, mais nécessaire par libpng14-14.dll (une dll du faisceau de gtk)

Répondre

1

On dirait que vous voulez lier statiquement afin que votre programme ne exiger la présence de zlib1.dll pour fonctionner. Mais zlib1.dll est une bibliothèque de liens dynamique (c'est ce que DLL signifie!), Donc vous ne pouvez pas le lier statiquement. La première chose que vous devez faire est de trouver une version statique de cette bibliothèque. Sur Windows, il se terminera normalement avec l'extension .lib. Je ne suis pas familier avec cmake, donc je vais laisser quelqu'un d'autre répondre à la partie de la question sur la façon de faire de cmake utiliser la bibliothèque statique, une fois que vous avez les deux.

+0

Comment allez-vous faire si cmake n'est pas nécessaire? – httpinterpret

+0

Cela dépend alors de votre compilateur. –

1

Désolé, il n'y a aucun moyen de le mélanger. Soit vous devez compiler et lier statiquement ou dynamiquement. Je l'ai essayé - ça ne marche pas. Donc si libpng.dll a besoin d'un zlib.dll, vous ne pouvez pas transformer zlib en une bibliothèque statique. Vous devez également compiler libpng en tant que bibliothèque statique.

Je l'ai fait plusieurs fois, les fichiers makefiles de PNG, ZLIB (et aussi les bibliothèques de formats d'image JPEG, TIFF) sont plutôt bons. Si vous avez besoin de plus de 30 minutes pour savoir quoi faire, vous devriez considérer cela comme une bonne formation sur vos compétences en makefile.

+0

Je ne sais pas si zlib1.dll est lié par 'LoadLibrary' ou une bibliothèque de chargement.Si ce dernier, alors il peut être corrigé. – httpinterpret

Questions connexes