2012-05-14 1 views
0

J'ai le problème suivant: J'ai une version 64 bits de matlab 2011b. J'ai besoin d'appeler certaines fonctions d'une DLL. Cela a fonctionné il y a quelques temps avec la version prof de Visual Studio 2010.Pourquoi Visual Studio ne lie-t-il pas correctement un fichier matlab mex contre le rundll?

Maintenant, je veux le faire fonctionner avec la version express. J'ai donc installé le Visual Studio C++ 2010 Express et le Win SDK 7.1. Maintenant, je donne à matlab la commande mex -setup et sélectionne le compilateur VC++. D'accord!

Si je veux charger le dll lui-même avec loadlibrary, je reçois des tonnes d'erreurs. Quelque chose comme: Échec de la construction de libFramework_thunk_pcwin64. La sortie du compilateur est:

cl -I"C:\MATLAB\R2011b\extern\include" /W3 /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo -I"U:\Framework\Framework\so" -I"U:\Framework\Framework\so" "libFramework_thunk_pcwin64.c" -LD -Fe"libFramework_thunk_pcwin64.dll" libFramework_thunk_pcwin64.c 
Bibliothek "libFramework_thunk_pcwin64.lib" und Objekt "libFramework_thunk_pcwin64.exp" werden erstellt. 
LIBCMT.lib(dllcrt0.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "[email protected]" in Funktion "[email protected]". 
LIBCMT.lib(tidtable.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "[email protected]". 
LIBCMT.lib(gs_support.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "[email protected]". 
LIBCMT.lib(onexit.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "[email protected]". 
LIBCMT.lib(crtmboxw.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "[email protected]" in Funktion "___crtMessageBoxW". 

<snip> 

libFramework_thunk_pcwin64.dll : fatal error LNK1120: 65 nicht aufgelöste externe Verweise. 

Error in load_Framework (line 4) 
    loadlibrary 'libFramework' 'Shaddower_C.h' 

Malheureusement ces erreurs sont en allemand car j'utilise le logiciel allemand. La traduction (en blanc) est qu'il existe des liens vers des symboles externes non solubles dans différentes fonctions. Si vous savez comment changer la langue en anglais, je peux vous donner la sortie exacte. Comme je l'ai googlé, j'ai découvert que toutes les fonctions que j'ai essayé étaient des bibliothèques standard, je viens de trouver quelques-uns des rundll32.dll mais peut-être il existe d'autres liens.

En fait, il semble que le compilateur ne peut pas accéder à la DLL par défaut de Windows (ou le sdk).

Pouvez-vous me dire ce qui ne va pas ici?

PS: Pour ceux qui comprennent la langue allemande voir http://www.gomatlab.de/viewtopic,p,91154.html#91154 J'ai posté sur un forum pur matlab poing, mais comme je suppose que c'est un problème VC++ j'ai aussi posté ici.

+0

Avez-vous installé le SDK 64 bits pour VS2010 express? Ce n'est pas une installation par défaut. http://stackoverflow.com/questions/1865069/how-to-compile-a-64-bit-application-using-visual-c-2010-express Vous ne devriez pas avoir à faire les étapes 2-3 sauf si vous utilisez un fichier de projet VS. – Chris

+0

Je ne comprends pas. Le lien concerne la compilation d'une application à partir de VC2010 directement. Je vais compiler via la commande Matlab mex. Cela appelle le compilateur 'cl' et Linker' link' pour faire les choses. Je n'ouvre jamais le VS2010 directement et je n'ai pas fait quoi que ce soit avec un fichier de projet VS. Alors s'il te plait, sois un peu plus concret ce que tu veux que je fasse. Merci –

+0

Désolé je pensais que j'étais. Est-ce que votre Matlab est une variante 64bit? Si oui, avez-vous installé le SDK 64 bits pour VS2010 (étape 1 dans ce lien)? Ceci est requis même si vous ne construisez pas à partir de VS. Vous ne pouvez pas utiliser un compilateur et un SDK 32 bits si vous utilisez Matlab 64 bits. Lorsque vous invoquerez mex, il tentera de lier le code 64 bits aux bibliothèques 32 bits et échouera. – Chris

Répondre

0

J'ai découvert que j'avais installé des paquets sur VS2010 Redistributable. Je les ai supprimés et le VS2010 installé et le SDK. Après avoir réinstallé le SDK tout est allé correctement.

Merci

Questions connexes