clang toolchain 설치

- https://wiki.unrealengine.com/Compiling_For_Linux 에서 필요한 clang toolchain 을 다운 받는다.
- 적절한 경로에 압축을 풀고 setup.bat 을 실행한다.
- OutputEnvVars.txt 에 있는 내용 중 LINUX_MULTIARCH_ROOT 를 환경 변수에 수동으로 추가한다.

빌드

- GenerateProjectFiles.bat 을 실행하고 MSVC 를 기동하면 플랫폼에 Linux 가 보인다.
- Shipping / Linux 설정으로 빌드하면 된다.

패키징

- 에디터에서 패키지 프로젝트 > 리눅스 를 선택한다.

(4.18 기준입니다.)

참고 : 리눅스용 크로스 컴파일 (http://api.unrealengine.com/KOR/Platforms/Linux/GettingStarted/index.html)

728x90

아래에 있는 폴더처럼 'PluginA', 'PluginB' 아래에 있는 모든 모듈을 가져오고 싶으면 2중 loop 를 돌아야하는데 윈도우 배치 파일 for 에서는 바로 중첩을 사용할 수 없다.

< 폴더 구조 >

Plugins/PluginA/Source/ModuleA1
                              /ModuleA2
                              /ModuleA3
Plugins/PluginB/Source/ModuleB1
                              /ModuleB2

python 이나 powershell 로 하면 쉽겠지만 윈도우 배치 파일로만 처리해야한다면 for 와 call 을 이용하여 처리할 수 있다.

for /f %%a ('dir /ad /b Plugins') do call :process_sub Plugins\%%a
goto :eof

:process_sub
for /f %%b ('dir /ad /b %1\Source') do echo %1\Source\%%b
goto :eof

label 을 이용해서 subroutine 을 만든다. 그리고 call 을 이용해서 호출하고 'goto :eof' 나 'exit /b' 이용하여 리턴하면 된다.

출처 :

'nested for loop in cmd' 

'windows cmd : call' 

728x90

Gitlab Hook Plugin 에 ruby-runtime 이 필요해서 설치했는데 아래와 같은 로딩 오류가 있었다.

(LoadError) no such file to load -- haml

윈도우 기본 설치 경로인 "Program Files (x86)" 에서 '(' 부분이 문제가 되는 것 같다.

'C:\jenkins' 같은 경로로 다시 설치할 필요가 있다고 한다. ㅜㅜ

참고 : https://github.com/elvanja/jenkins-gitlab-hook-plugin/issues/9

728x90

C 드라이브 용량 중 hiberfil.sys 파일이 생각보다 큰 용량을 차지한다. 최대 절전 모드용 파일인데 데스크탑에서는 삭제해도 큰 문제가 없는 파일이라고 본다. 삭제하는 방법은 아래와 같다.

명령 프롬프트를 관리자 권한으로 실행하고 'powercfg -h off' 라고 입력한다.

출처 : http://liverex.net/709

728x90

웹페이지에서 Jenkins 를 재기동하고 싶을 때는 아래 url 을 이용하면 된다.

(jenkins_url)/safeRestart - Allows all running jobs to complete. New jobs will remain in the queue to run after the restart is complete. 

(jenkins_url)/restart - Forces a restart without waiting for builds to complete.

출처 : https://stackoverflow.com/questions/8072700/how-to-restart-jenkins-manually

P.S. 참고로 'safe restart' Plug-in 을 설치하면 관리 페이지에 'Restart Safely' 버튼이 추가된다.

728x90

ruby-runtime 에 초기화 문제가 있어 비활성화 혹은 제거하려고 했는데 초기화가 안되니 관리 목록에 보이지 않아 제거나 비활성화할 수 없었다.

수동으로 비활성화하려면 plug-in 폴더에 disabled 파일을 추가하면 된다고 한다.

출처 : https://wiki.jenkins.io/display/JENKINS/Removing+and+disabling+plugins

728x90

e-mail 에 첨부된 파일의 경우 base64 로 인코딩되어 있다. 인코딩된 문자열을 파일로 디코딩하고 싶을 때 아래 웹 페이지를 이용하면 된다.

https://www.base64decode.org/

인코딩된 문자열을 붙여넣고 'DECODE' 버튼을 누르면 디코딩된 파일을 다운받을 수 있다.

728x90

CALL :NORMALIZEPATH "..\..\..\foo\bar.txt"
SET BLAH=%RETVAL%

ECHO "%BLAH%"

:: ========== FUNCTIONS ==========
EXIT /B

:NORMALIZEPATH
  SET RETVAL=%~dpfn1
  EXIT /B

출처 : https://stackoverflow.com/questions/1645843/resolve-absolute-path-from-relative-path-and-or-file-name

728x90

언리얼로 패키징하면 최상위 폴더에 게임 exe 파일을 실행해주는 exe 파일이 생성된다. 확인해보니 패키징 과정 중 WinPlatform.Automain.cs 에 있는 StageBootstrapExecutable 에 의해 생성되고 있었다. 

다음과 같은 과정을 거쳐 생성된다.

: Engine/Binaries/[Platform]/BootstrapPackagedGame-[Platform]-Shipping.exe 파일을 타겟 경로에 복사
: Build/Windows/Application.ico 파일을 101 리소스 갱신
: 201 리소스 아이디로 실행할 게임 exe 파일 상대 경로 문자열 갱신
: 301 리소스 아이디로 실행할 게임 기본 파라미터 문자열 갱신

BootstrapPackagedGame 은 2가지 기능은 한다.

: MSVCP140.DLL 과 XINPUT1_3.DLL 을 체크하여 Microsoft Visual C++ 2015 Runtime 이나 DirectX Runtime 이 설치되었는지 확인한다.
: 설치되어 있지 않다면 배포 버전에 포함된 UE4PrereqSetup_x64.exe 를 실행한다.
: 필요한 패키지들이 설치되어 있다면 리소스 경로를 참고하여 게임 exe 를 실행한다.

728x90

실행 중인 OS가 64 비트인지 확인하기 위해서는 IsWow64Process 를 이용하면 된다. 지원하지 않는 OS 도 있으니 GetProcAddress 를 이용해야한다. 64 비트 프로그램의 경우에는 그냥 TRUE 를 return 하면 된다.

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL IsWow64()
{
#ifdef _WIN64
    return TRUE;
#else
    BOOL bIsWow64 = FALSE;

    //IsWow64Process is not available on all supported versions of Windows.
    //Use GetModuleHandle to get a handle to the DLL that contains the function
    //and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
    if (NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
            //handle error
        }
    }
    return bIsWow64;
#endif
}

참고 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms684139(v=vs.85).aspx

728x90

+ Recent posts