У меня следующая проблема: у меня 64-битная версия Matlab 2011b. Мне нужно вызвать некоторые функции из DLL. Некоторое время назад это работало с профессиональной версией Visual Studio 2010.
Теперь я хочу, чтобы он работал с экспресс-версией. Поэтому я установил Visual Studio C++ 2010 Express и Win SDK 7.1. Теперь я даю Matlab команду mex -setup
и выбираю компилятор VC++. Отлично!
Если я хочу загрузить саму dll с помощью loadlibrary
, я получаю массу ошибок. Что-то вроде: Сборка libFramework_thunk_pcwin64 не удалась. Вывод компилятора:
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 "__imp__GetCurrentThreadId@0" in Funktion "__CRT_INIT@12".
LIBCMT.lib(tidtable.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetCurrentThreadId@0".
LIBCMT.lib(gs_support.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__GetCurrentThreadId@0".
LIBCMT.lib(onexit.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__DecodePointer@4".
LIBCMT.lib(crtmboxw.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__DecodePointer@4" 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'
К сожалению, эти ошибки на немецком языке, так как я использую немецкое программное обеспечение. Перевод (небрежный) состоит в том, что в разных функциях есть ссылки на неразрешимые внешние символы. Если вы знаете, как изменить язык на английский, я могу дать вам точный вывод.
Погуглив, я обнаружил, что все функции, которые я пробовал, были из стандартных библиотек, я только что нашел некоторые из rundll32.dll, но, возможно, есть и другие ссылки.
На самом деле кажется, что компилятор не может получить доступ к dll Windows по умолчанию (или SDK).
Можете ли вы сказать мне, что здесь происходит не так?
PS: Для тех, кто понимает немецкий язык, см. http://www.gomatlab.de/viewtopic,p,91154.html#91154 Я написал на чистом кулаке форума Matlab, но, как я предполагаю, это проблема VC++, которую я также разместил здесь.
cl
и компоновщикlink
для выполнения этих задач. Я никогда не открываю VS2010 напрямую и не знаю, как что-то делать с файлом проекта VS. Поэтому, пожалуйста, сформулируйте немного конкретнее, что вы хотите, чтобы я сделал. Спасибо - person Christian Wolf   schedule 15.05.2012