반응형

잘만 되던 VCPKG가 갑자기 OpenCV, VTK 등등을 빌드 할려니 pkgconf를 빌드하는 과정에서 에러가 났다.

결국 하루 동안 계속 문제점을 찾다가 해결 방법을 찾았다..

 

일단 나는 이런 오류가 떴다. 참고로 vcpkg install pkgconf:x64-windows 해서 나온 에러다.

CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:127 (message):
    Command failed: "C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" install -v
    Working Directory: C:/dev/vcpkg/buildtrees/pkgconf/x64-windows-dbg
    Error code: 1
    See logs for more information:
      C:\dev\vcpkg\buildtrees\pkgconf\package-x64-windows-dbg-out.log
      C:\dev\vcpkg\buildtrees\pkgconf\package-x64-windows-dbg-err.log

Call Stack (most recent call first):
  installed/x64-windows/share/vcpkg-tool-meson/vcpkg_install_meson.cmake:33 (vcpkg_execute_required_process)
  ports/pkgconf/portfile.cmake:67 (vcpkg_install_meson)
  scripts/ports.cmake:192 (include)


error: building pkgconf:x64-windows failed with: BUILD_FAILED
See https://learn.microsoft.com/vcpkg/troubleshoot/build-failures?WT.mc_id=vcpkg_inproduct_cli for more information.
Elapsed time to handle pkgconf:x64-windows: 6.1 s
Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
Then check for known issues at:
  https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+pkgconf
You can submit a new issue at:
  https://github.com/microsoft/vcpkg/issues/new?title=[pkgconf]+Build+error+on+x64-windows&body=Copy+issue+body+from+C%3A%2Fdev%2Fvcpkg%2Finstalled%2Fvcpkg%2Fissue_body.md

 

 

에러난 부분의 문제를 보면 

Command failed: "C:/Program Files/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" install -v
Working Directory: C:/dev/vcpkg/buildtrees/pkgconf/x64-windows-dbg

Working Directory에서 위 커맨드를 실행 중 오류가 났다고 한다.

 

그래서 나는 이걸 저 디렉토리에서 똑같이 실행해봤다.

그러더니 이런 오류가 떴다.

Traceback (most recent call last):
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\meson.py", line 27, in <module>
    sys.exit(mesonmain.main())
             ^^^^^^^^^^^^^^^^
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\mesonmain.py", line 291, in main
    return run(sys.argv[1:], launcher)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\mesonmain.py", line 282, in run
    return CommandLineParser().run(args)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\mesonmain.py", line 67, in __init__
    from . import mconf, mdist, minit, minstall, mintro, msetup, mtest, rewriter, msubprojects, munstable_coredata, mcompile, mdevenv, mformat
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\mconf.py", line 20, in <module>
    from . import mintro
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\mintro.py", line 23, in <module>
    from .ast import IntrospectionInterpreter, BUILD_TARGET_FUNCTIONS, AstConditionLevel, AstIDGenerator, AstIndentationGenerator, AstJSONPrinter
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\ast\__init__.py", line 19, in <module>
    from .interpreter import AstInterpreter
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\ast\interpreter.py", line 25, in <module>
    from ..interpreter import (
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\interpreter\__init__.py", line 33, in <module>
    from .interpreter import Interpreter, permitted_dependency_kwargs
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\interpreter\interpreter.py", line 19, in <module>
    from ..wrap import wrap, WrapMode
  File "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\mesonbuild\wrap\wrap.py", line 9, in <module>
    import urllib.request
  File "urllib\request.py", line 88, in <module>
  File "http\client.py", line 71, in <module>
  File "email\parser.py", line 12, in <module>
  File "email\feedparser.py", line 27, in <module>
  File "email\_policybase.py", line 9, in <module>
  File "email\utils.py", line 29, in <module>
  File "socket.py", line 51, in <module>

    ^
ImportError: DLL load failed while importing _socket: 지정된 모듈을 찾을 수 없습니다.
[0/1] "C:\dev\vcpkg\downloads\tools\python\python-3.11.8-x64\python.exe" "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\meson.py" "install" "--no-rebuild"
FAILED: meson-internal__install
"C:\dev\vcpkg\downloads\tools\python\python-3.11.8-x64\python.exe" "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\meson.py" "install" "--no-rebuild"
ninja: build stopped: subcommand failed.

이 오류를 보면 vcpkg에서 다운로드 받는 python-3.11.8에서 meson.py를 실행해서 설치를 하는데 _socket과 관련된 DLL 파일을 찾을 수 없어 발생한 문제이다.

 

일단 뭐 파이썬 홈페이지 가서 3.11.8를 받아서 설치하고 dll 파일을 가져오면 아마도 될 것 같긴 하지만..

혹시 실패할 수도 있고.. 제일 중요한건 그거까지 하기가 귀찮았다.. 내가 기본으로 설치한게 3.12.6이라서.. 저걸 깔면 나중에 또 지워야 하고 해서.. 귀찮았다.

 

그래서 혹시 몰라서 내가 기본으로 깔아둔 3.12.6 버전의 파이썬으로 빌드가 될까 해서 해봤더니..

python "C:\dev\vcpkg\downloads\tools\meson-1.5.2-dd4692\meson.py" "install" "--no-rebuild"
Installing pkgconf-5.dll to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\bin
Installing pkgconf.lib to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\lib
Installing pkgconf-5.pdb to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\bin
Installing pkgconf.exe to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\bin
Installing pkgconf.pdb to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\bin
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\libpkgconf\libpkgconf.h to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\../include\pkgconf/libpkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\libpkgconf\stdinc.h to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\../include\pkgconf/libpkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\libpkgconf\iter.h to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\../include\pkgconf/libpkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\libpkgconf\bsdstubs.h to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\../include\pkgconf/libpkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\libpkgconf\libpkgconf-api.h to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\../include\pkgconf/libpkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\man/pkgconf.1 to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/man\man1
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\man/pkg.m4.7 to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/man\man7
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\man/pc.5 to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/man\man5
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\man/pkgconf-personality.5 to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/man\man5
Installing C:\dev\vcpkg\buildtrees\pkgconf\x64-windows-dbg\meson-private\libpkgconf.pc to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\lib\pkgconfig
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\pkg.m4 to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/aclocal
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\AUTHORS to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/doc/pkgconf
Installing C:\dev\vcpkg\buildtrees\pkgconf\src\conf-2.3.0-07e4a066bf.clean\README.md to C:/dev/vcpkg/packages/pkgconf_x64-windows/debug\share/doc/pkgconf

빌드가 엄청 잘된다;;

 

일단 이 문제는 VCPKG에서 기본으로 설치하는 Python 3.11.8 버전의 어떤 라이브러리의 DLL 모듈이 없어서 에러났다니깐.. 그냥 VCPKG에서 빌드할 때 Python을 다른걸로 바꾸면 되는게 아닌가 하고 생각을 했다.

 

그래서 VCPKG에서 어느쪽에서 파이썬이 있는지 찾고 다운로드 하는지 찾아봤더니.. 한 파일이 나왔다.

C:\dev\vcpkg\scripts\cmake\vcpkg_find_acquire_program(PYTHON3).cmake

if(CMAKE_HOST_WIN32)
    set(program_name python)
    set(program_version 3.11.8)
    if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
        set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
    else()
        set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
    endif()
    if(build_arch MATCHES "^(ARM|arm)64$")
        set(tool_subdirectory "python-${program_version}-arm64")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-arm64.zip")
        set(download_filename "python-${program_version}-embed-arm64.zip")
        set(download_sha512 42b820e34c4a77fe928e0af395292d804dcbf7e1132cf353ce6ce23435a687ec580f03ccbf3cd94d98c9dc5ac951f8ca64dbd65cded7ef1d675a39d63f8ace8d)
    elseif(build_arch MATCHES "(amd|AMD)64")
        set(tool_subdirectory "python-${program_version}-x64")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-amd64.zip")
        set(download_filename "python-${program_version}-embed-amd64.zip")
        set(download_sha512 da5f01e94d3505eebdfd4d2e70d9cf494925199024479cc29ef144567906b2e8ad55a855b199a755318f5fb9a260f21b987a5fc85f31acf631af4b677921251d)
    else()
        set(tool_subdirectory "python-${program_version}-x86")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-win32.zip")
        set(download_filename "python-${program_version}-embed-win32.zip")
        set(download_sha512 c88ef02f0860000dbc59361cfe051e3e8dc7d208ed39bb5bc20a3e8b8711b578926e281a11941787ea61b2ef05b945ab3133322dcb85b916f79ac4ada57f6309)
    endif()

    set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}")
    vcpkg_list(SET post_install_command "${CMAKE_COMMAND}" -E rm python311._pth)
else()
    set(program_name python3)
    set(brew_package_name "python")
    set(apt_package_name "python3")
endif()

이 파일이다.

 

여기를 보면 26번 줄에 set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}") 이런 코드가 있는데

이게 파이썬의 폴더를 검색하는 것 같다.

 

그래서 이걸 set(paths_to_search "C:/Users/cheongpark/AppData/Local/Programs/Python/Python312") 이렇게 바꿨다.

python.exe 파일이 있는 폴더까지를 지정해야하는 것 같다.

if(CMAKE_HOST_WIN32)
    set(program_name python)
    set(program_version 3.11.8)
    if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
        set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
    else()
        set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
    endif()
    if(build_arch MATCHES "^(ARM|arm)64$")
        set(tool_subdirectory "python-${program_version}-arm64")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-arm64.zip")
        set(download_filename "python-${program_version}-embed-arm64.zip")
        set(download_sha512 42b820e34c4a77fe928e0af395292d804dcbf7e1132cf353ce6ce23435a687ec580f03ccbf3cd94d98c9dc5ac951f8ca64dbd65cded7ef1d675a39d63f8ace8d)
    elseif(build_arch MATCHES "(amd|AMD)64")
        set(tool_subdirectory "python-${program_version}-x64")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-amd64.zip")
        set(download_filename "python-${program_version}-embed-amd64.zip")
        set(download_sha512 da5f01e94d3505eebdfd4d2e70d9cf494925199024479cc29ef144567906b2e8ad55a855b199a755318f5fb9a260f21b987a5fc85f31acf631af4b677921251d)
    else()
        set(tool_subdirectory "python-${program_version}-x86")
        set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-win32.zip")
        set(download_filename "python-${program_version}-embed-win32.zip")
        set(download_sha512 c88ef02f0860000dbc59361cfe051e3e8dc7d208ed39bb5bc20a3e8b8711b578926e281a11941787ea61b2ef05b945ab3133322dcb85b916f79ac4ada57f6309)
    endif()

    set(paths_to_search "C:/Users/cheongpark/AppData/Local/Programs/Python/Python312")
    vcpkg_list(SET post_install_command "${CMAKE_COMMAND}" -E rm python311._pth)
else()
    set(program_name python3)
    set(brew_package_name "python")
    set(apt_package_name "python3")
endif()

 

 

이렇게 한 후에 다시 vcpkg install pkgconf:x64-windows를 해보면?!!

Computing installation plan...
The following packages will be built and installed:
    pkgconf:x64-windows@2.3.0
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/x64/cl.exe
Restored 0 package(s) from C:\Users\pkdpm\AppData\Local\vcpkg\archives in 91.2 us. Use --debug to see more details.
Installing 1/1 pkgconf:x64-windows@2.3.0...
Building pkgconf:x64-windows@2.3.0...
-- Found Python version '3.12.6 at C:/Users/cheongpark/AppData/Local/Programs/Python/Python312/python.exe'
-- Using meson: C:/dev/vcpkg/downloads/tools/meson-1.5.2-dd4692/meson.py
-- Using cached pkgconf-pkgconf-pkgconf-2.3.0.tar.gz.
-- Cleaning sources at C:/dev/vcpkg/buildtrees/pkgconf/src/conf-2.3.0-07e4a066bf.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source C:/dev/vcpkg/downloads/pkgconf-pkgconf-pkgconf-2.3.0.tar.gz
-- Using source at C:/dev/vcpkg/buildtrees/pkgconf/src/conf-2.3.0-07e4a066bf.clean
-- Found external ninja('1.11.0').
-- Configuring x64-windows-dbg
-- Getting CMake variables for x64-windows
-- Configuring x64-windows-dbg done
-- Configuring x64-windows-rel
-- Configuring x64-windows-rel done
-- Package x64-windows-dbg
-- Package x64-windows-rel
-- Fixing pkgconfig file: C:/dev/vcpkg/packages/pkgconf_x64-windows/lib/pkgconfig/libpkgconf.pc
-- Fixing pkgconfig file: C:/dev/vcpkg/packages/pkgconf_x64-windows/debug/lib/pkgconfig/libpkgconf.pc
-- Installing: C:/dev/vcpkg/packages/pkgconf_x64-windows/share/pkgconf/copyright
-- Performing post-build validation
Stored binaries in 1 destinations in 125 ms.
Elapsed time to handle pkgconf:x64-windows: 16 s
pkgconf:x64-windows package ABI: 2aa878a6cc6bcbd98fbe97e87caf0270763d6f45acecb8cd2d758d0e269baeab
Total install time: 16 s
pkgconf provides pkg-config modules:

  # a library for accessing and manipulating development framework configuration
  libpkgconf

-- Found Python version '3.12.6 at C:/Users/pkdpm/AppData/Local/Programs/Python/Python312/python.exe' 

이런식으로 바뀌면서 정상적으로 빌드가 된다!!!

 

드디어 잘 수 있다..

반응형
반응형

오류	C2857	/Ycpch.h 명령줄 옵션과 함께 지정한 '#include' 문이 소스 파일에 없습니다.

 

오늘 프로그래밍 도중에 이런 오류가 떴다..

일단 나의 경우에는 파일 분할 때문에 정리할려고 include, source 폴더를 만들고 거기에 있는 것을 가져오는 방식으로 구현할려고 했다.

그런데 이런 문제가 발생해서 검색해보니.. 모든 사람들이 그냥 미리 컴파일 된 헤더를 비활성화 하라고 한다..

나는 미리 컴파일 된 헤더를 활성화 시킬려고 하는건데..

 

아무튼 원인은 잘 모르겠지만

#include "pch.h" <- *.h 파일
#include "../include/pch.h" <- *.cpp 파일

각 파일에는 위에 적힌 대로 있다. 

그런데 문제는

이 미리 컴파일 된 헤더 파일 이름이 pch.h로만 되어있는데 저게 그대로 include가 되어있는지를 감지하고 안되어있으면 저런 오류를 뱉어내는 것 같다.

그래서 미리 컴파일 된 헤더 파일 이름을 ../include/pch.h로 해봐도 .h 파일 쪽에 문제가 있을테니.. 할 수 있는 방법은 없었다.

 

그러다가 생각난게 다른 라이브러리를 연결할 때 C/C++일반에서 추가 포함 디렉터리를 사용해야한다는게 생각나서 include 폴더 경로를 C/C++일반추가 포함 디렉터리에 추가를 한 후에 이렇게 하면 어차피 ../include 같은건 자동으로 되니깐 .cpp 파일에서 모두 수정하고 실행하니 해결되었다!

$(ProjectDir)\include

위에 이건 프로젝트 경로 안의 include 폴더를 지정하도록 하는 그런거다.

 

그리고 이런 오류가 뜨는 경우도 있는데 그냥 이건 pch.cpp 파일이나 stdafx.cpp 파일의 속성에서 

"사용(/Yu)"로 되어있을 텐데 "만들기(/Yc)"로 안해서 이다. "만들기(/Yc)"로 변경해주면 끝

 

그리고 $(ProjectDir) 같은건 여기에 보면 잘 설명 되어있다.

https://learn.microsoft.com/en-us/cpp/build/reference/common-macros-for-build-commands-and-properties?view=msvc-170

 

Common macros for MSBuild commands and properties

Learn more about: Common macros for MSBuild commands and properties

learn.microsoft.com

 

반응형
반응형

오늘 WinRT로 프로젝트를 제작하면서 OpenCV를 사용해야해서 OpenCV 코드를 작성하고 컴파일을 했는데 컴파일은 분명 잘되는데 프로그램을 실행하면서 처음에는 잘 되다가 다시 실행하면 아래 사진 처럼 오류가 난다.. 도무지 모르겠는데.. 그러다가 12시간 동안 뭔 문제인지 찾다가 알아냈다. (참고로 진짜 12시간 걸렸다.)

Windows 스토어 응용 프로그램 'APP_ID'을(를) 활성화할 수 없습니다. 활성화 요청이 실패했습니다(오류: '앱이 시작되지 않았습니다').

문제 해결에 필요한 정보는 도움말을 참조하십시오.

 

일단 이 원인.. 잘은 모르겠지만 프로그램을 실행하는 도중에 Console 창에서 오류가 나는걸 못 띄우니 여기에서라도 실행할 때 오류를 띄우는 것 같다. 그렇다 보니 원인도 모르겠고.. 

디버깅을 할려고 해도 처음부터 저게 떠버려서 디버깅도 할 수가 없었다..

 

아무튼 방법은 찾았는데 그냥 OpenCV dll 파일이 없어서였다.. (왜 이것 때문에.. 12시간을 고생한거지;;)

 

OpenCV VCPKG WinRT용 설치

일단 한가지 알아낸 것이 있는데 WinRT에서 OpenCV를 돌릴려면 WinRT 용으로 바꿔야하는 것 같다.

WinRT는 UWP로 뭐 돌아가는건데 VCPKG에서 UWP로 설치하는 버전이 있다.

설치는 아래처럼 하면 된다.

vcpkg install opencv4:x64-uwp

이런식으로 설치하면 uwp 버전으로 설치가 된다.

 

오류 해결

앞에서 말했 듯이 그냥 이건 dll 파일이 없어서 생긴 오류이다. 실행에 필요한 dll 파일을 아래 경로에 붙여넣기 하면 오류가 해결된다.

<ProjectName>\x64\Release\<ProjectName>\AppX

그런데 한가지 문제가 있다.. 빌드 할 때마다 dll 파일이 사라져서 자동으로 복붙이 되게 해야하는데

이럴 때는 방법이 있다. 

 

한가지는 그냥 Visual Studio 프로젝트 파일에서 새 필터로 dll 파일 추가해서 하는 방법이 있는데 이건 비추하고..

다른 방법으로는 자동으로 복붙되게 하는 것이다.

 

일단 프로젝트 파일을 오른쪽 클릭하고 속성을 열어서 나오는 창에서

빌드 이벤트의 빌드 후 이벤트로 들어간다.

들어가게 되면 명령줄이 있는데 여기에 코드만 넣으면 된다.

 

일단 빌드 후 이벤트는 말그대로 빌드가 된 후에 자동으로 명령줄에 있는걸 실행하게 되는 것이다.

 

코드는 이걸 넣으면 된다!

xcopy /y "$(OutDir)\*.dll" "$(OutDir)\AppX"

일단 내가 대충 만들어서 해봤을 때 되는 코드이니.. 이게 잘 되는 코드인지는 모르겠다만.. 아무튼 난 저걸 명령줄에 넣어서 했더니 자동으로 복붙이 되었고 해결이 되었다.

 

코드는 대충 AppX에는 dll이 없지만 다행이도 출력 폴더에는 dll 파일이 있다. 그래서 모든 dll 파일을 가지고 AppX 폴더로 붙여 넣는 코드이다.

 

아무튼 이걸로 해결!

반응형
반응형

원인

필요한 헤더파일이 안불러와진 것..

 

문제

WinRT로 프로그램을 만드는 중에.. 어떤 오류가 발생했다.. 

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류 C3779 'winrt::impl::consume_Windows_UI_Input_IPointerPoint<winrt::Windows::UI::Input::IPointerPoint>::Position': 'auto'을(를) 반환하는 함수를 정의되기 전에 사용할 수 없습니다.	ScaraGUIController	C:\Users\PKDPMS0328\source\repos\ScaraGUIController\ScaraGUIController\MainPage.cpp 22

이 오류는 WinRT 부분에서만 일어나는 오류 같은데.. 블로그나 해결 방법은 잘 안나와 있어서.. 일단 마이크로소프트 문서에 검색해보니..

https://learn.microsoft.com/ko-kr/cpp/error-messages/compiler-errors-2/compiler-error-c3779

 

컴파일러 오류 C3779

자세한 정보: 컴파일러 오류 C3779

learn.microsoft.com

해결 방법은 다행히 있었다..!

 

해결방법

어쨋든 내 코드의 경우 

#include <winrt/Windows.UI.Xaml.Input.h>

void function(winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
	winrt::Windows::UI::Input::PointerPoint point = e.GetCurrentPoint(ControlJoint());
    
    	Point_X().Text(winrt::to_hstring(point.Position().X));
    	Point_Y().Text(winrt::to_hstring(point.Position().Y));
}

대충 이런식의 코드인데.. 여기에서 오류가 난 부분은 point.Position().X 저쪽 부분이다..

여기에서 문제의 저 오류에 winrt::Windows::UI::Input::IPointerPoint 이런게 뭐가 문제가 있다면서 알려주는데

이것을 헤더파일에 추가하면 문제가 해결되는 것이였다..!

 

그래서 나의 경우에는 IPointerPoint는 Input 헤더 안에 있는 것이기 때문에 

#include <winrt/Windows.UI.Input.h> 이 코드로 헤더파일을 추가해서 해결했다..!

#include <winrt/Windows.UI.Xaml.Input.h>
#include <winrt/Windows.UI.Input.h> // 오류 해결에 필요한 헤더파일

void function(winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
	winrt::Windows::UI::Input::PointerPoint point = e.GetCurrentPoint(ControlJoint());
    
    	Point_X().Text(winrt::to_hstring(point.Position().X));
    	Point_Y().Text(winrt::to_hstring(point.Position().Y));
}

 

결론

'winrt::impl::consume_Windows_UI_Input_IPointerPoint<winrt::Windows::UI::Input::IPointerPoint>::Position': 'auto'을(를) 반환하는 함수를 정의되기 전에 사용할 수 없습니다.

 

이런식으로 오류가 뜰 경우

1.  <winrt::Windows::UI::Input::IPointerPoint> 부분이 자신의 오류에서 뭐인지 찾는다.

2. winrt::Windows::UI::Input::IPointerPoint 이것에 해당하는 헤더파일을 찾는다. 보통은 맨 뒤에꺼 지운게 아마 헤더파일일 꺼다.. winrt::Windows::UI::Input 여기까지, 그리고 헤더파일로 할 경우 winrt/Windows.UI.Input.h

3. 찾은 헤더파일을 추가해서 문제를 해결한다!!!!

 

근데.. 애초에 Input::PointerPoint가 필요한 헤더파일이 winrt/Windows.UI.Input.h였다.. winrt/Windows.UI.Xaml.Input.h가 아닌... 그냥.. 필요한 헤더파일을 안불러왔었던 것.. 

반응형
반응형

그저께 부턴가 윈도우 업데이트 하면서 갑자기 이런 오류가 꺼도 꺼도 계속 떴다..

찾아보니 NProtect가 날뛰고 있던 것.. 은행 백신 때문에 깐 거였는데..

 

바로 지워버리니 해결..

반응형
반응형

요약 및 해결 방법

YOLO에서 학습시킬 때 파라미터에 workers를 자신의 사양에 맞게 바꾸면 된다.

train(data = data, epochs = 100, workers=<사양에 맞게 ex) 0>)

yolo train data=data epochs=100 workers=0

 

본문

인공지능을 학습할려는데 보통 윈도우로 학습하는데.. 왜 사람들이 리눅스로 학습하는지 알고 싶어서 WSL를 설치해서 CUDA 연결하고 리눅스로 YOLO를 학습 시켜보았다. 다른 학생 프로젝트 때문에

 

그런데 학습 시키는 과정에서 아래와 같은 오류가 발생했다.

CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

이 오류를 보면 CUDA_LAUNCH_BLOCKING 이거를 1로 활성화 시켜서 디버깅을 해보라고 되어있는데.. 저걸 하면 자세히 오류가 뜨기는 뜬다.. 근데 자세히 뜨기는 떠도 그냥 메모리가 모잘르다는 것 같았다.

(CUDA_LAUNCH_BLOCKING이거.. CUDA끄고 실행하는 것 같은데.. 저것 때문에 학습 속도가 엄청 느려져서.. 오류 뜰때까지 기다리는게 으음..)

 

근데 전혀 모잘르지는 않았다. 램을 많이 쓰는 것 같지만 램이 최대까지 쓰는걸 보지는 못했고 70%정도 까지만 쓰는걸로 확인이 되어서 이 문제는 아닌 것 같아서.. 여러 해결 방법을 보긴 했다.

어디서는 리눅스에 뭔가 제한이 걸려 있어서 .wslconfig로 제한을 풀거나 하는 시도로 해결했다라는 글도 보고

그냥 WSL 포기하고 리눅스로 해서 해결했다는 글도 있고..

 

근데 나는 wslconfig도 안되고 리눅스로 바꾸는 것도 할 수가 없다.

그러다가 어디선가 workers를 0으로 해보라는 글이 있어서 해봤는데.. 정상적으로 돌아갔다.

 

대충 workers의 역할이 데이터를 로드 시키면서 여러 작업들의 속도를 병렬로 처리할 수 있게 하는 것 같은데 그 뒤에 숫자는 병렬 처리하는 갯수인 걸로 짐작하긴 했는데.. 

 

왜 오류가 나는지 공식 홈페이지를 확인해보니..

https://docs.ultralytics.com/modes/train/#arguments

 

Train

Step-by-step guide to train YOLOv8 models with Ultralytics YOLO including examples of single-GPU and multi-GPU training

docs.ultralytics.com

기본적으로 값이 8이다..

하하하 저것 때문에 윈도우로 돌려서.. 조금 빡치긴 했었는데.. 일단 그래도 해결은 했다.

 

저거 값을 수정하는 과정에서 알게된건 Windows나 Linux에서는 높게 잡아도 자동으로 잡아주는 것 같은데 WSL에서만 안되는 것 같다.

그래서 하나씩 값을 높여보면서 딱 적당한 값을 찾는게 좋을 것 같다.

나는 1로 설정했는데 0으로 했을 때 40초가 나왔었는데 33초로 줄었다..

 

암튼 해결 CUDA_LAUNCH_BLOCKING

반응형

'오류 | 문제 > Python' 카테고리의 다른 글

파이썬 실행 터미널 창 변경하기  (0) 2022.07.11
반응형

OpenCV와 Dlib로 프로젝트를 제작 중에..

기이한 현상이 발견됬다..

 

cv::Mat CVImage = dlib::toMat(DlibImage);
cv::cvtColor(CVImage, CVImage, cv::COLOR_RGB2BGR);

여기에서 저 2개의 명령어를 본다면.. 첫번째 명령어는 DlibImage를 OpenCV의 Mat 이미지인 CVImage로 바꾸는데..

보통 이렇게 바꾸면 RGB 이미지가 CVImage에 할당이 된다..

그런데 내 프로젝트가 전체적으로 BGR이다 보니깐.. RGB를 BGR로 변환을 해야해서 cvtColor로 RGB에서 BGR로 바꾸는 명령어를 쳐서 실행했는데..

 

이상하게 첫번째에 실행하면 괜찮다가.. 두번째에 실행하니깐 RGB가 RGB로 출력되는 것이다..

이유는 잘은 모르겠지만.. cvtColor가 오류를 일으켰거나 RGB와 BGR이 서로 할당되고 그러면서 충돌이 일어난 것 같다.. 난 cvtColor에 문제가 있는 것 같다 생각은 든다..

 

즉 실행하면 실행할 수록 BGR > RGB > BGR > RGB > BGR 이런식으로 계속 번갈아가며 출력되는 것..

 

그래서 내가 해결한 방법은.. 애초부터 RGB이미지를 안쓰기로 해서.. 그냥 이미지 변환안하고 바로 썼다..

그러니깐 잘된다..

 

으음..

아직도 뭔 문제인지 모르겠다.. RG를 BGR로 바꿀때의 문제들은 해외 커뮤니티에서 보긴 했는데..

 

내 OpenCV 버전이 낮아서 그런건가.. 그래도 최신껄로 깔았는데.. 뭐가 문제인건지..

 

해결했던 방법..

그냥 RGB 안쓰고 애초에 처음부터 BGR로 되게 작업..

반응형
반응형

프로젝트 제작중에 

cv::Mat A, B;
A = B;

이렇게 B의 이미지 데이터를 A로 넘기는걸 써봤다..

근데 문제가 생긴다..

 

나중에 A의 이미지를 다른걸로 바꾸면 B가 이상하게 바뀐다는 것이다..

분명 B의 이미지를 A로 넘기는 것 밖에 안했는데 바뀌는..

 

그래서 ChatGPT에 물어보니 이미지 데이터를 보내는게 아니고 참조를 한다고 한다.. 대충 A와 B는 같은 메모리를 사용하게 하는 그런건가..? 암튼 저렇게 하면 A가 B의 이미지 데이터를 참조하도록 되기 때문에.. A를 바꾸면 B가 같이 바뀌는 것이였다.. 으으

 

그래서 해결 방법은 2가지가 있는데

cv::Mat A, B;
A.copyTo(B);

이렇게 하는 방법이 있다. A의 이미지 데이터를 B로 넘긴다는 뜻!

또 다른 방법은

cv::Mat A, B;
B = A.clone();

A의 이미지를 복제해서 B로 넣는 것..

 

근데 난 의미상으론 복사를 써야하기 때문에.. 첫번째 방법으로 썼다..

암튼 끝!

반응형

+ Recent posts