, 나는이 이미 그냥 참고로, 답을해야한다고 생각합니다. 당신이 파일을 컴파일하는 것 같습니다 일부 비 MATLAB 소스에서, 괜찮아요,하지만 당신은 가능성이있어 그것에 대해 더 많은 정보를 줄거야. features.cc 파일은 이며 오류가 발생하는 이유는 round
입니다. 함수에 라이브러리를 제공하거나 소스에서 컴파일하려면 이 필요합니다. help mex
을 수행하면 라이브러리 링커 에 대해 경로로 -L
, 라이브러리에 대해 -l
명령을 제공 할 수 있습니다. 이 기능은 광고와 정확히 일치하지 않으므로 -lC:/path/to/library/libfile.lib
또는 그 이상을 사용해야 함을 기억합니다. 우선, 은 Matlab 도움말에서 yprime
예제를 컴파일하는 것이 좋습니다. 이렇게하면 컴파일러 설정이 올바르게 수행되었는지 확인할 수 있습니다. 또한 의 yprime.c 파일과 mexFunction
을 살펴보십시오. 컴파일러에서 .cc
파일을 C 파일로 받아 들일 수 있습니다. 그것은 C++ 파일로 해석되어 두통을 불러 일으킬 수 있습니다. 아이디어를 테스트하기 위해 yprime.c
파일 ~ yprime.cc
의 이름을 바꿀 수 있습니다.
수정 코드를 제공해 주셔서 감사합니다. 이건 내 친구 인 케익 케이크 야.
Microsoft Visual C++ 2008 Express
>> mex -v -g features.c
This is mex, Copyright 1984-2007 The MathWorks, Inc.
-> Default options filename found in C:\Documents and Settings\wynkocl\Application\Data\MathWorks\MATLAB\R2009b
----------------------------------------------------------------
-> Options file = C:\Documents and Settings\wynkocl\Application Data\MathWorks\MATLAB\R2009b\mexopts.bat
MATLAB = C:\MATLAB\R2009B~1
-> COMPILER = cl
-> Compiler flags:
COMPFLAGS = /c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD
OPTIMFLAGS = /O2 /Oy- /DNDEBUG
DEBUGFLAGS = /Z7
arguments =
Name switch = /Fo
-> Pre-linking commands =
-> LINKER = link
-> Link directives:
LINKFLAGS = /dll /export:mexFunction /LIBPATH:"C:\MATLAB\R2009B~1\extern\lib\win32\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /incremental:NO /implib:"C:\DOCUME~1\WYNKOCL\LOCALS~1\TEMP\MEX_7L~1\templib.x" /MAP:"features.mexw32.map"
LINKDEBUGFLAGS = /DEBUG /PDB:"features.mexw32.pdb"
LINKFLAGSPOST =
Name directive = /out:"features.mexw32"
File link directive =
Lib. link directive =
Rsp file indicator = @
-> Resource Compiler = rc /fo "mexversion.res"
-> Resource Linker =
----------------------------------------------------------------
--> cl /c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\DOCUME~1\WYNKOCL\LOCALS~1\TEMP\MEX_7L~1\features.obj -IC:\MATLAB\R2009B~1\extern\include -IC:\MATLAB\R2009B~1\simulink\include /Z7 -DMX_COMPAT_32 features.c
features.c
features.c(27) : error C2059: syntax error : 'type'
features.c(28) : error C2059: syntax error : 'type'
features.c(92) : warning C4013: 'round' undefined; assuming extern returning int
C:\MATLAB\R2009B~1\BIN\MEX.PL: Error: Compile of 'features.c' failed.
아 ... 이제 우리는이 문제를 찾을 수 있습니다 내가 사용 컴파일 할 때 :-)
이것은 내가 얻을 내 오류입니다. 첫째, C2059 오류는 실제로 함수 max
이 재정의되고있는 것과 관련이 있습니다. 그런 다음 round
함수에는 프로토 타입이 없습니다. 흠, 이상 하네. round
이 math.h
에 있지 않기 때문에 글쎄, 그건 그래서 당신은 다음처럼 파일의 맨처럼 implement one해야합니다 :
int round(double number)
{
return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5);
}
을 지금은 컴파일! 더 자세한 디버깅 메시지를 얻기 위해 빌드 할 때 팁으로 mex -v -g
을 시도 할 수도 있습니다. 희망이 당신의 길에 당신을 잡아!
여기에 내가 여기에있어 무엇의 마지막입니다 :
- 다시 다운로드 VOC-release4.01.tgz
- 추출하고 모든
.cc
파일을 .cpp
파일의 이름을 바꿉니다.
열고 compile.m
스크립트과 같이 수정합니다
MEX -v -g resize.cpp MEX -v -g dt.cpp MEX -v -g 기능을 제공합니다.CPP MEX -v -g getdetections.cpp
퍼센트 사용 % 0 빠른 당신의 설정에 따라 다음 중 하나를 3 느린입니다
퍼센트 0) 멀티 스레드 회선 SSE %의 MEX는 -v 사용 - BLAS에게 % 사용 경고 g fconvsse.cpp -o fconv
퍼센트 1) 다중 스레드 컨벌루션 다음 BLAS 버전 MATLAB> = 2010b % 인텔 CPU가 작동하지 않는 % MEX -O fconvblasMT.cpp -lmwblas -o fconv
,210 % 2) BLAS없이 mulththreaded 회선 %의 MEX가 -O fconvMT.cpp -o fconv
% 3) 회선 사용 BLAS MEX -g -v fconvblas.cpp -LC : \ MATLAB \ R2009bSP1 \의 통근자의 \ lib 디렉토리 \ fconv
% 4) 기본 회선, 매우 호환 % - 출력 마이크로 소프트 -lmwblas \는 Win32는 MEX -O fconv.cpp -o fconv 내가 옵션 3와 함께 머물 것을 권장합니다
은의 pthreads는 것 같다 이 시점에서 당신에게 조금 너무 많이. :-)
- resize.cpp
는 #DEFINE bzero 추가의 (b를 렌) (memset 함수 ((b), '\ 0'(LEN)) (공극) 0) int round (double number) { return (number> = 0)? (int) (number + 0.5) : (int) (number - 0.5); 상단 } 변화 :
alphainfo ofs[len];
alphainfo * ofs = (alphainfo *)mxMalloc(len);
및
assert(sy-1 >= 0);
에 어설
행 (SY1> = 0); 함수의 마지막에
mxFree(ofs);
을 잊지 마세요.
- dt.cpp : 모두
int32_t
을 int32_T
으로 변경하십시오.
features.cpp
INT 라운드 (더블 수) { 리턴 (수> = 0)을 추가 하시겠습니까? (int) (number + 0.5) : (int) (number - 0.5); }
C:\MATLAB\R2009bSP1\extern\lib\win32\microsoft
디렉토리가 있는지 확인하십시오. Matlab 릴리스 extern 라이브러리 디렉토리를 거기에 두지 않으십시오.
즐기십시오.
어떤 mex 컴파일러를 사용하고 있습니까? 'mex -setup'을 참조하십시오. – Nzbuu
나는 "mex -setup"명령을 통해 두 컴파일러를 시도했다. matlab에 포함 된 것과 Visual C++ 첫 번째 파일은 일부 파일에서 실행되지만 두 번째 파일은이 파일, .h 파일에서 실행되지 않는다. 치명적인 오류 – SafeY