Unity 플러그인/C++ .. 그 2
3792 단어 UnityPluginOpenCVUnity
목적
움직이지 않을 때의 체크리스트
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#pragma comment(lib,"ippiw.lib" ) // *
#pragma comment(lib,"ittnotify.lib" ) // *
#pragma comment(lib,"libjpeg-turbo" CV_EXT_STR)//JPGは名称変更?
릴리스 버전만 설정
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
}
}
}
Reference
이 문제에 관하여(Unity 플러그인/C++ .. 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tangotarou2/items/3944f7b57cf92d7bea3c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)