manywaypark's Blog
개발, 검색, 함수

qmake file 에서의 INSTALLS

tips & tricks/Qt 2018. 10. 26. 14:01 by manywaypark

qmake 파일에서 INSTALLS에 뭔가 추가할 때는 한번에 하나씩해야한다.

problem:

.lib 파일과 .dll을 각각 /path/to/install의 하위에 설치하려는 (제법 멋진) 의도를 가진 아래 코드는 (n)make install 했을 때 제대로 동작하지 않고 .lib 파일만 설치된다.

    target_lib.path  = /path/to/install/lib

    target_lib.files = $${DESTDIR}/*.lib

    target_dll.path  = /path/to/install/bin

    target_dll.files = $${DESTDIR}/*.dll

    INSTALLS += target_lib target_dll


solution:

이렇게 두 종류의 파일 타입을 각각 써줘야 제대로 동작한다.

    target_lib.path  = /path/to/install/lib

    target_lib.files = $${DESTDIR}/*.lib

    INSTALLS += target_lib

    target_dll.path  = /path/to/install/bin

    target_dll.files = $${DESTDIR}/*.dll

    INSTALLS += target_dll


happy hackin'


PS. 몇년이나 지난 코드에서, 그동안 사용할 때마다 dll은 수동 복사했던 project file에서 발견함. Orz.


개발용 Windows VM

tips & tricks/Win 2018. 10. 21. 22:11 by manywaypark

MS에서 개발 환경이 구축된 VM을 배포하는구나.

https://developer.microsoft.com/ko-kr/windows/downloads/virtual-machines


여태 나만 모른 건가?


happy hackin'

Qt + MSVC 2017

tips & tricks/Qt 2018. 10. 16. 18:00 by manywaypark

현재 기준(VS2017)으로 설명한다. 

일단 VS를 설치하면 기본적으로는 VC가 안깔린다. 

요즘은 다들 C++ 따위 쓰지 않나봐. Orz.

VC 설치:

Visual Studio Installer에서 Visual Studio Community 2017 > (More 밑의) Modify > Desktop development with C++ 을 선택해서 VC를 설치한다.

Qt 설치:

Qt 설치 시에 msvc 어쩌구 하는 component들 중에서 2017 관련이 보이면 그걸 설치하고, 없으면 2015 관련을 설치한다 (2015와 2017은 호환된다고 어디서 봤다).


매번 헷갈리네. 이건 내 문제가 아니라 MS 문제일지도...


happy hackin'


refs: 

  • https://forum.qt.io/topic/78962/how-to-use-qt-with-visual-studio-2017/12
  • https://stackoverflow.com/questions/45164515/how-to-use-visual-studio-2017-with-qt-to-develop-gui-applications


Ubuntu에서 Nvidia driver 깔기

장치가 인식되어있는지 확인:

$ ubuntu-drivers devices

driver 자동 설치:

$ sudo ubuntu-drivers autoinstall


참조 링크에 더 다양한 방법이 있다.


ref: https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux


 happy hackin'

Visual Studio 2017에는 google test가 통합되었구나. 세상이 좋아지고 있다.

https://docs.microsoft.com/ko-kr/visualstudio/test/how-to-use-google-test-for-cpp


happy hackin'

ssh reverse tunneling

tips & tricks/Linux/Unix 2018. 3. 12. 16:01 by manywaypark

기본적으로 ssh, autossh 등을 사용하면 됨. 

systemd 내에서 autossh를 쓸 경우는 좀 tricky한 상황이 생기는 듯 (portforwarding 환경에서는 port forwading에 실패했을 경우 재시작할 때 제대로되지 않는다.

autossh는 자동재시작 등의 기능이 있는데 이것은 systemd에서 제공하는(아주 잘 하는) 기능이다. 두개를 섞으면 좀 이상해지는 것으로 보인다.

좀 검색을 해보니 ssh + systemd가 제대로 잘 동작하는 것으로 보인다. 

좀더 시간을 두고 해결하는 것도 고려해보자.


/etc/systemd/system/secure-tunnel@.service 파일:


[Unit]

Description=Setup a secure tunnel to %I

After=network.target


[Service]

Environment="LOCAL_ADDR=localhost"

EnvironmentFile=/etc/default/secure-tunnel@%i

ExecStart=/usr/bin/ssh -NT -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -NR ${LOCAL_PORT}:localhost:${REMOTE_PORT} ${TARGET} -p ${TARGET_PORT}


# Restart every >2 seconds to avoid StartLimitInterval failure

RestartSec=5

Restart=always


[Install]

WantedBy=multi-user.target


/etc/default/secure-tunnel@jupiter 파일:


TARGET=jupiter

TARGET_PORT=2222

LOCAL_PORT=20022

REMOTE_PORT=22


부팅시 실행되게 활성화 및 시작:

systemctl enable secure-tunnel@jupiter.service

systemctl start secure-tunnel@jupiter.service

현재 상태보기:

systemctl status secure-tunnel@jupiter.service

상태 연속으로 보기:

journalctl -f -u secure-tunnel@jupiter.service


refs:

http://system-monitoring.readthedocs.io/en/latest/ssh.html

https://gist.github.com/thomasfr/9707568 -> autossh + systemd

https://gist.github.com/drmalex07/c0f9304deea566842490 -> 최종적으로 (약간 수정해서) 내가 사용한 방법 (ssh + systemd)

https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units -> systemd 관련 상세 설명


2018-03-23 추가:
가끔 network configuration을 변경하면 재접속이 안되는 경우가 발생하는데...
아래와 같은 로그가 찍히면서 재접속 시도가 계속 실패한다.

~$ sudo journalctl -f -u secure-tunnel@tmp01.service
[sudo] password for xxxxxx: 
-- Logs begin at Fri 2018-03-23 16:45:46 KST. --
Mar 23 16:55:37 teevr-lt2 systemd[1]: secure-tunnel@tmp01.service: Failed with result 'exit-code'.
Mar 23 16:55:42 teevr-lt2 systemd[1]: secure-tunnel@tmp01.service: Service hold-off time over, scheduling restart.
Mar 23 16:55:42 teevr-lt2 systemd[1]: Stopped Setup a secure tunnel to tmp01.
Mar 23 16:55:42 teevr-lt2 systemd[1]: Started Setup a secure tunnel to tmp01.
Mar 23 16:55:42 teevr-lt2 ssh[2679]: Error: remote port forwarding failed for listen port 1907
Mar 23 16:55:42 teevr-lt2 systemd[1]: secure-tunnel@tmp01.service: Main process exited, code=exited, status=255/n/a
Mar 23 16:55:42 teevr-lt2 systemd[1]: secure-tunnel@tmp01.service: Unit entered failed state.
Mar 23 16:55:42 teevr-lt2 systemd[1]: secure-tunnel@tmp01.service: Failed with result 'exit-code'.

~$ sudo netstat -plant | grep 1907
tcp        0      0 127.0.0.1:1907          0.0.0.0:*               LISTEN      9949/sshd: xxxxxx
tcp6       0      0 ::1:1907                :::*                    LISTEN      9949/sshd: xxxxxx
tcp6      42      0 ::1:1907                ::1:40842               CLOSE_WAIT  9949/sshd: xxxxxx
tcp6       0      0 ::1:1907                ::1:40838               CLOSE_WAIT  9949/sshd: xxxxxx
tcp6      42      0 ::1:1907                ::1:40848               CLOSE_WAIT  9949/sshd: xxxxxx
tcp6      42      0 ::1:1907                ::1:40844               CLOSE_WAIT  9949/sshd: xxxxxx
tcp6      42      0 ::1:1907                ::1:40840               CLOSE_WAIT  9949/sshd: xxxxxx

접속을 이미 물고 있는 상태(LISTEN)에서 계속 재접속(port bind)을 시도하는 것이었다.
문제는 설정의 ServerAliveInterval이 60초로 설정되어 있고, 재접속시도는 5초만에 하게한 것(RestartSec) 이었다. Orz.
RestartSec을 최소한 ServerAliveInterval 보다는 길게 설정해야한다.

아래 처럼 변경후에 다른 subnet으로 옮기거나해도 잘 동작했다.
ServerAliveInterval=7
RestartSec=10

라고 쓸려고 했으나...
ClientAliveCountMax(default가 3)도 고려해야하므로, ServerAliveInterval * 3 보다 큰 값으로 RestartSec을 설정하면 잘 될거같은데...
실패하는 경우가 생긴다.

그냥 접속안되면 netstat 때려보고 port 물고 있는 pid를 죽이자!

happy hackin'

problem:

Windows, MSVC 환경에서 min이나 max가 포함된 qt 파일(eg, qrandom.h 등)에서 다음과 같은 경고가 나온 후에, 괴상한 에러가 나면서 컴파일에 실패하는 경우가 발생했다.

warning C4003: not enough actual parameters for macro 'max'


solution:

windows.h가 include 되기 전에 다음과 같은 선언을 넣어준다.

#ifndef NOMINMAX

# define NOMINMAX

#endif


ref: https://stackoverflow.com/questions/6884093/warning-c4003-not-enough-actual-parameters-for-macro-max-visual-studio-2010


happy hackin'

choco install erlang --forcex86=true

이렇게 하면 설치는 제대로 되지만 shim이 잘못된 위치(64bit용 위치 즉, \Program Files\ 아래)를 가리키게 되어있어서 오류가 난다.


PS C:\ProgramData\chocolatey> erl

Cannot find file at 'c:\program files/erl9.0/erts-9.0/bin/erl.exe' (c:\program files\erl9.0\erts-9.0\bin\erl.exe). This usually indicates a missing or moved file.


tools/shimgen.exe를 사용해서 다시 생성하면 해결된다.


PS C:\ProgramData\chocolatey\bin> ren erl.exe erl.exe.ERROR

PS C:\ProgramData\chocolatey\bin> ..\tools\shimgen.exe -o C:\ProgramData\chocolatey\bin\erl.exe -p 'C:\Program Files (x8

6)\erl9.0\bin\erl.exe'

PS C:\ProgramData\chocolatey\bin> ren .\werl.exe werl.exe.ERROR

PS C:\ProgramData\chocolatey\bin> ..\tools\shimgen.exe -o C:\ProgramData\chocolatey\bin\werl.exe -p 'C:\Program Files (x

86)\erl9.0\bin\werl.exe'


제목을 'chocolatey에서 shim이 잘못되었을 때 새로 생성하는 방법'으로 할걸 그랬나?


happy hackin'


2018-10-23 추가:

오늘 새로 생긴 박스에 설정하면서 새로 깔아보니 아래와 같은 메시지가 보였다. 이것이 의미하는 바는... 저 5개의 실행파일 모두에 대해서 shimgen을 해 주어야한다는 것이다.

......

Installing erlang...

erlang has been installed.

Added C:\ProgramData\chocolatey\bin\erl.exe shim pointed to 'c:\program files/erl10.0.1/erts-10.0.1/bin/erl.exe'.

Added C:\ProgramData\chocolatey\bin\werl.exe shim pointed to 'c:\program files/erl10.0.1/erts-10.0.1/bin/werl.exe'.

Added C:\ProgramData\chocolatey\bin\erlc.exe shim pointed to 'c:\program files/erl10.0.1/erts-10.0.1/bin/erlc.exe'.

Added C:\ProgramData\chocolatey\bin\escript.exe shim pointed to 'c:\program files/erl10.0.1/erts-10.0.1/bin/escript.exe'.

Added C:\ProgramData\chocolatey\bin\dialyzer.exe shim pointed to 'c:\program files/erl10.0.1/erts-10.0.1/bin/dialyzer.exe'.

......

byobu 내에서 text-mode(=nox) emacs를 실행하면 기본 테마(특히 색상)가 적용되지 않는 것처럼 보이는데, 사실은 byobu의 기본 terminal 설정이 그냥 날(raw) screen이라서 컬러를 표시하지 못하는 것이다.


내 경우는 기본 login terminal에서 컬러표시가 잘되었으므로 아래와 같이 해서 컬러가 표시되게 했다.

$ echo $TERM

xterm-256color

$ echo 'set -g default-terminal "xterm-256color"' >> ~/.byobu/profile.tmux


refs:

https://unix.stackexchange.com/questions/240532/getting-256-colors-to-work-with-byobu

http://osmanov-dev-notes.blogspot.kr/2011/03/how-to-enable-color-prompt-in-byobu.html


happy hackin'




금번에 구입한 극강(13.3 inch, 1650*2200)의 Ebook Reader인 Boox Max Carta를 보조 모니터로 활용하기 위해서 약간의 삽질을 했다.


구성 방법은 이렇다.

  1. xwindow에서 모종의 가상 데스크탑(vnc server)을 만들고 VNC viewer가 그 데스크탑에 접속.
  2. x2x를 활용해서 마우스나 키보드 입력을 가상데스크탑이 받을 수 있게한다.


안드로이드 기기 설정

일단 태블릿/폰에는 VNC Viewer만 있으면 되므로 플레이스토어에서 찾아서 설치한다 (bVNC를 추천한다).


Ubuntu 호스트 설정

$ sudo apt install vnc4server x2x

$ vnc4server -geometry 1650x220

......

...... desktop is foo:2   # (여기 2가 VNC port 번호다. 일반적 VNC 시작포트 5900에 더해서 쓴다 여기서는 5902가 된다)

......

$ x2x -west -to :2        # 보조모니터를 왼쪽에 둔다 (즉 현재 xwindow의 왼쪽으로 마우스 포인터가 벗어나면 보조모니터로 설정된 쪽으로 키보드/마우스 입력이 간다)


접속

안드로이드에서 VNC Viewer를 실행한 후에 접속 정보 설정(현재 예제의 경우 Ubuntu 호스트 아이피 번호와 포트번호 5902를 입력)하고 접속하면 xwindow가 뜨는 것을 확인할 수 있다.


(아무것도 없는 빈 화면에 X자 마우스포인터만 있다고해서 당황하지 않는다. 아래의 설정을 하면 제법 볼만해 진다).


window manager등 초기 설정

~/.vnc/xstartup 파일을 아래 두 가지 중 하나로 생성하면 된다.


gnome desktop 비슷한 설정

!/bin/sh

export XKL_SMODMAP_DISABLE=1

# Uncomment the following two lines for normal desktop:

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS


[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

vncconfig -iconic &


gnome-panel &

gnome-settings-daemon &

metacity &

nautilus &

gnome-terminal &


좀 가볍다고 알려진 xfce4 설정:

#!/bin/sh

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS

startxfce4 &


[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

vncconfig -iconic &


파일 생성 후에 다시 접속하면 제법 쓸만한 환경이 되어있다.


refs:

https://askubuntu.com/questions/28608/how-do-you-use-an-android-tablet-as-a-second-display -> vnc4server, x2x 사용

http://www.whatwant.com/839 -> 전반적 VNC 사용

https://askubuntu.com/questions/57129/how-do-i-start-the-gui-window-manager-over-vnc -> xstartup 파일을 xfce4로 설정하기


2017-08-14 추가: 내 경우 xfce4를 사용할 때 tab key가 안먹는 경우가 발생해서 당혹스러웠는데 여기(http://blog.zerosum42.com/2011/10/tech-fixing-tab-key-in-vnc.html) 참조하면 해결된다. 간단히 요약하자면 xface4-settingings-manager 실행 후 Window Manager > Keyboard에서 "Switch window for same application" 선택 후 "Clear" 버튼 눌러주거나 아래 명령을 명령행에서 실행하면 된다.

xfconf-query -c xfce4-keyboard-shortcuts -p /xfwm4/custom/'<'Super'>'Tab -r


happy hackin'

1 2 3 4 5 ··· 16 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

12-23 09:50