Unity 플러그인/C++ .. 그 2

목적



움직이지 않을 때의 체크리스트



Unity는 플러그인 업데이트 시 재부팅이 필요
Plugin 복사 실수 Debug/Release 실수
OpenCV를 사용하면 작동하지 않습니다.

BUILD_WITH_STATIC_CRT



LINUX의 shared/static LIB의 차이점
'BUILD_SHARED_LIBS'의 체크를 해제하고 'BUILD_WITH_STATIC_CRT'의 체크가 들어가 있는지 확인한다.

종속성 조사



Dependency Walker에서 실행 파일의 종속 파일 검사
depends.exe

LNK2038



"LNK2038 오류 'RuntimeLibrary' 불일치가 감지되었습니다. 'MT_StaticRelease' 값이 MD_DynamicRelease 값 'dllmain.obj'와 일치하지 않습니다. Dll2 1 D:\GitUnity\toioUnity\0130\Dll2\Dll (stl.obj)
"
[C++][코드 생성]의 설정이 다르기 때문에 발생한다.

새로 만든 프로젝트


OpenCV 설정


MD MT



/MD
응용 프로그램은 런타임 라이브러리의 다중 스레드 및 DLL 사용 버전을 사용합니다. _MT 및 _DLL을 정의하고 컴파일러가 라이브러리 이름 MSVCRT.lib를 .obj 파일에 삽입합니다.

이 옵션을 사용하여 컴파일된 응용 프로그램은 MSVCRT.lib에 정적으로 연결됩니다. 이 라이브러리는 링커가 외부 참조를 확인할 수 있도록 하는 코드 레이어를 제공합니다. 실제 작업 코드는 MSVCRversionnumber에 포함되어 있습니다. DLL. 런타임에 MSVCRT.DLL에 연결된 응용 프로그램에 사용할 수 있어야 합니다.

/MT
응용 프로그램은 다중 스레드 버전의 정적 런타임 라이브러리를 사용합니다. _MT를 정의합니다. 또한 컴파일러가 라이브러리 이름 LIBCMT.lib를 .obj 파일에 삽입하도록 링커는 LIBCMT.lib를 사용하여 외부 기호를 확인합니다.

문제



OpenCV를 C++NativePlugin화하여 Unity에서 사용한다.

오목에 따르면 OpenCV를/MT 옵션으로 빌드하면 좋다. VC에서 [C++][코드 생성]-[런타임 라이브러리] 항목/MT로 잘된다는 것.

링크 오류입니다.
추가 LIB이므로 작성하십시오.
#pragma comment(lib,"ippiw.lib" ) // * 
#pragma comment(lib,"ittnotify.lib" )  // *
#pragma comment(lib,"libjpeg-turbo" CV_EXT_STR)//JPGは名称変更?

비고) OpenCV 빌드는 그대로. DLL 작성 프로젝트만/MT한 버전은 안됨(확인한)

만든 프로젝트



릴리스 버전만 설정
DLL : DLL 테스트를 위해 C++/exe에서 호출 확인했습니다.

참고⇓



[[Unity] OpenCVSharp에서 ArUco를 사용하여 AR 마커 검출 수행] (



htps : // 코바 → 아 b. 테 ch/2019/02/07/오펜 cv샤 rp%에 3% 81% 아 %99%에3%82%8B/ )

텍스처 데이터로부터 OpenCV::Mat을 만든다.


    int type = CV_8UC4;// byte* 4
    int h = 256;
    int w = 256;
    Mat matImage( h, w, type ); // rowl, int cols, int type );
    for ( int y = 0; y < h; y++ ) {
        for ( int x = 0; x < w; x++ ) {
            uchar* texptr = matImage.ptr( y,x );// y,x
            int index = 0;// ((y * h) + x);
            if ( y % 8 == 0 ){
                texptr[index+0] = 0xff;// 青
                texptr[index+1] = 0x0;
                texptr[index+2] = 0x0;
                texptr[index+3] = 0xff;
            }
            else{
                texptr[index + 0] = 0x0;
                texptr[index + 1] = 0x0;
                texptr[index + 2] = 0xff; // RED
                texptr[index + 3] = 0xff;
            }
        }
    }

좋은 웹페이지 즐겨찾기