2009-10-21 7 views
3

J'espère vraiment que quelqu'un peut m'aider parce que ce problème m'a totalement bloqué et frustré.Windows 7 OpenLDAP Curl DLL Dépendance Hell

Hier, j'ai installé un nouveau Windows 7 x64 dans un boîtier de développement.

J'ai eu VS2008 installé, Tortoise SVN, a fait un checkout, compilé mon projet actuel, tout va bien et dandy.

Mais quand je vais courir (soit F5 dans VS ou tout simplement exécuter l'exe du shell) je reçois une boîte de dialogue qui ressemble à ceci:

Sadness http://www.aliparr.net/images/error1.jpg

Je bidouiller et peut » Je vois un problème évident. Je buste depends.exe, pensant peut-être qu'il ya un manque dll, et je reçois ceci:

Eeek http://www.aliparr.net/images/error2.jpg

Je joue, trouver différentes versions de gpsvc.dll et ishims.dll et de les mettre dans le. exe, pas de chance.

Si je fais un profil en dépend (qui suit la fenêtre de sortie de vs), je reçois ceci:

.. 
Loaded "c:\windows\syswow64\ADVAPI32.DLL" at address 0x75F20000 by thread 1. Successfully hooked module. 

Loaded "c:\windows\syswow64\LPK.DLL" at address 0x76B20000 by thread 1. Successfully hooked module. 

Loaded "c:\windows\syswow64\USP10.DLL" at address 0x761C0000 by thread 1. Successfully hooked module. 

Loaded "c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4926_none_508ed732bcbc0e5a\MSVCR90.DLL" at address 0x70570000 by thread 1. Successfully hooked module. 

Loaded "c:\users\ali\desktop\repository\development\trunk\spree\bin\debug\OPENLDAP.DLL" at address 0x001E0000 by thread 1. Successfully hooked module. 

Exited "c:\users\ali\desktop\repository\development\trunk\spree\bin\debug\SPREE.EXE" (process 0x5D4) with code -1073741701 (0xC000007B) by thread 1. 

Il semble donc openldap.dll est la dernière chose à se charger avant tout va mal . J'ai besoin de cette DLL parce que j'utilise cURL dans l'application pour faire un peu de communication JSON ...

J'ai essayé de jouer avec des fichiers en mouvement et d'essayer des DLLs différentes, mais honnêtement, je suis un peu aveugle ici. Quelqu'un peut-il m'aider s'il vous plaît ou me diriger dans la bonne direction?

Il convient de noter ces dll et l'installation fonctionnent très bien dans Windows Vista x64 et x86 - est-ce une chose Windows 7? Massive merci d'avance, je pourrais encore avoir quelques cheveux après cela est fait.


Modifier

J'ai curl.exe maintenant réalisé meurt exactement de la même manière avec openldap.dll - Je suppose que certaines fenêtres 7 question? Pouvez-vous/est-ce que quelqu'un a une boucle sans la dépendance sur openldap? Y at-il une autre bibliothèque légère C/C++ là-bas qui va me permettre de récupérer un document sur http et faire le POST http impair?

Merci

+1

ali, avez-vous envisagé de soumettre ce rapport de bogue à Microsoft Connect? ça pourrait être un "oops" sur M $ part. – sivabudh

+0

Je pourrais le faire si cela s'avérait être un vrai bug. Les chances sont que c'est un 'oops' de ma part si;) –

+0

vrai ... je trouve juste ça marrant que cela a fonctionné sur Vista mais pas Windows 7, vous savez? Mais de toute façon ... bonne chance! – sivabudh

Répondre

0

Problème similaire ici. DLL dépendants GPSVC.DLL et MSVCR90.DLL.

J'ai réussi à me débarrasser de IESHIMS.dll en définissant mon chemin de variables d'environnement à C: \ Program Files (x86) \ Internet Explorer. Sûrement cela ne devrait pas devoir être fait!

Y at-il encore une solution à ce problème?

3

J'avais moi-même un problème très similaire: je développais un programme C (en utilisant le compilateur MinGW gcc) qui utilisait la bibliothèque curl pour faire des opérations http GET. Je l'ai testé sur Windows XP (32 bits) et Windows 7 (64 bits). Mon programme fonctionnait sous Windows XP, mais dans Windows 7 il s'est écrasé avec le même message d'erreur 0xc000007b que l'OP a obtenu.J'ai utilisé Dependency Walker sur un programme dépouillé (avec un seul appel à la bibliothèque curl: curl_easy_init()). J'ai essentiellement eu le même journal que le vôtre, avec OPENLDAP.DLL comme le dernier module chargé avec succès avant le crash.

Cependant, il semble que mon programme ait planté lors du chargement de LIBSASL.DLL (qui était le prochain module chargé en fonction du journal de Dependency Walker exécuté sous Windows XP).

Lorsque vous regardez à nouveau dans le journal de Dependency Walker sur Windows 7, LIBSASL.DLL affiche en effet un module x64. J'ai réussi à exécuter mon programme en copiant une version 32 bits du fichier DLL d'une autre application sur mon disque dur vers le répertoire de mon programme.

Espérons que cela fonctionnera pour d'autres personnes ayant des problèmes similaires (également pour le PO si le problème n'était toujours pas résolu après ces années). Si copier une version 32 bits de LIBSADL.DLL dans le répertoire de votre programme n'aide pas, un autre module peut provoquer le plantage. Exécutez Dependency Walker sur les systèmes 32 et 64 bits et recherchez le nom du module dans le journal de l'exécution réussie.

+0

et @Kebian - Merci à vous deux pour votre contribution. Je pense que j'ai réussi à contourner le problème et en suis honnêtement sorti il ​​y a quelque temps. J'espère que vos réponses aideront quelqu'un d'autre coincé dans ce piège si! Merci encore! –

+0

@stubbscroll wer avez-vous obtenu le bit 64 de libsasl.dll? – Antarus

1

Je ne peux pas répondre complètement à vos questions, j'ai compilé libcurl sur Windows 7 Professionnel x64 et je n'ai aucun problème. Bien que je ne l'ai pas compilé avec le support d'OpenLDAP, je suppose que c'est là que réside le problème. En ce qui concerne IEShims.dll, Dependency Walker signale généralement cela comme un module manquant. Je ne me souviens pas de la raison exacte, mais il s'agissait de la charger dynamiquement quand elle n'est pas trouvée dans% Path%.

Si vous avez cependant besoin de déboguer cela et que vous utilisez Windows 7, essayez de faire un lien physique entre% ProgramFiles% \ Internet Explorer \ IEShims.dll et% windir%.

Bien que, je vois sur le vidage d'écran qu'il semble que Spree.exe n'est pas chargé comme un binaire x64, qui pourrait très bien l'être. Il y a une différence dans le chargement des fonctions exportées et des piping ou exec() un binaire, le premier mentionné nécessite que l'architecture soit la même pour l'importateur et l'exportateur.

1

J'ai également constaté que le mien essaye de charger une version 64 bits de LIBSASL.DLL - celle qui est venue avec ma distribution de tortue de 64 bits. J'ai aussi seulement besoin de curl pour tirer un peu de données JSON. Je pense que la meilleure solution sera de reconstruire libcurl à partir de la source et d'exclure le LDAP car je n'en ai pas besoin de toute façon.

0

libsasl nécessite ieshims.dll, si vous n'avez pas de support sasl dans openldap, alors ieshims.dll ne sera pas nécessaire.

0

Si vous utilisez Windows x64, vous devez copier votre dll dans c:/windows/SysWoW64. J'ai eu le même problème quand je voulais utiliser pthreads dans Windows OS 8. Lorsque j'ai été copié pthreads dll à SysWow64 le programme a été exécuté avec succès.