부제 : Ubuntu에서 Make compile 코드에 Qt GUI 추가하기

 

프롤로그

Ubuntu terminal 창에서 make compile 코드에 Qt GUI 추가하는 방법은 없을까?라는 단순한 호기심에서 작업을 시작하게 되었다.

 

작업 내용

Make 정상적으로 compile 코드(GNU Make 4.2.1 컴파일러 사용 했음) 준비가 되어 있고, Ubuntu에서 Qt 설치하는 작업을 해야 한다.

참고로, 본인이 사용하는 Ubuntu version 20.04이다.

 

1. Qt 설치 준비

$ sudo apt update
$ sudo apt upgrade

 

컴파일러를 이미 갖고 있다는 가정하에 설명을 하지만, 혹시라도 compiler 없는 경우는 하기 명령어를 실행한다.

$ sudo apt install build-essential

 

2. Qt 설치하기

Qt 관련 페키지를 설치한다. 참고로 qt5 설치하지만, 다른 버전을 설치할 수도 있다. 예를 들어 qt4 ...

$ sudo apt install qt5-default

 

Qt creator 설치하기 위해 아래 그림과 같이 "ubuntu software" 클릭하여 실행한다.

 

검색창에서 "Qt creator" 입력한 설치를 한다. 하기 1 / 2 / 3 참고. 본인은 이미 install 해서 설치 과정은 생략한다.

 

3. Qt 작업환경 만들기

Qt 실행한다. 다음 "Projects" 버튼을 누른 , "+ New" 버튼을 누른다.

 

"+ New" 버튼을 누르면 "Qt Widgets Application" 선택 하단의 "Choose" 누른다.

 

다음 하기의 붉은 부분에 원하는 PRJ 이름 경로를 각각 설정 "Next" 버튼을 누른다.

 

다음 창에서 Build system 디폴트로 설정된 qmake 그대로 사용하기 위해, 별도의 추가 설정 없이 "Next" 버튼을 누른다.

 

Class Information에서도 디폴트 상태로 "Next" 버튼을 누른다. 혹시라도 이름을 변경하고 싶다면 변경해도 무방.

 

다음 번역 파일 설정에서 디폴트 상태로 사용해도 되고 한국어를 설치해도 된다. 다음 "Next" 버튼을 누른다.

 

다음이 중요한 부분이다. 컴파일러를 설정하는 부분인데, 하기 options 눌러서 qmake(Qt 컴파일러) 현재 사용하고 있는 , make compile 코드에서 사용한 컴파일러를 이곳에서 선택해주면 된다.

 

먼저 Qt 다음과 같이 설정한다.

"Option" 누른 다음 "Qt versions" 탭을 선택 è Add 버튼 선택 è위에서 설치한 qt5 qmake 선택 è"Apply" 버튼 선택한다.

경로는 /usr/lib/x86_64_linux_gnu/qt5/bin/qmake 이다.

 

 

다음 "Kits " 선택 è  Qt version에서 방금 설정한 qt5 변경한다.

 

그리고 마지막으로 소스 컴파일시 사용했던 compiler gcc 다음과 같이 설정하여 준다.

 

 

만약 해당 버전이 없는 경우 "compilers" 탭에서 Manual 선택 è C++ 선택 Add 버튼을 눌러 C++ 컴파일러 설정 è C 선택 Add 버튼을 눌러 C 컴파일러를 설정하면 된다. 다음 다시 부분 설정으로 돌아가서 선택하면 된다.

 

Apply 버튼과 OK 버튼을 눌러 설정을 모두 완료해 준다.

 

이상 설정이 제대로 되었다면 다음과 같이 "Desktop" 보일 것이다.

Check 하고 Next 버튼을 누른다.

 

하기 화면에서 Finsh 누르면 모든 설정이 완료된다.

 

설정이 완료되면 하기 코드가 나타난 화면을 있다.

빨간 안에 실행 버튼을 누르면 GUI 실행해 있다.

 

실행을 하면 다음과 같은 GUI 표시된다.

 

4. Qt 이용한 디자인

위에서 GUI 화면이 정상적으로 표시 되었다면, Project 작업창에서 "Forms" 아래 있는 "mainwindow.ui" 더블 클릭한다.

 

 

그럼 아래와 같이 우리에게 익숙한 UI들이 왼쪽에 표시 되어 있는 것을 확인 있다.

필요한 요소들을 Drag해서 왼쪽 상단 작업창에 끌어 놓으면 된다. 간단하게 GUI 작업을 있다.

 

 

Push button 2개와 Line Edit 1개로 다음과 같이 꾸며 보았다.

 

실행 버튼을 누르면 정상적으로 실행이 되는 것을 확인 있다.

 

5. 기존 소스코드를 qt main.c 합치기

기존 make compile 했던 source code main.c qt main.c 합친다.

Qt main.c Qt creator에서 더블 클릭하면 다음과 같이 간단한 코드로 구성이 되어 있는 것을 있다.

 

main.c 파일에 기존 make compile했던 코드를 합치면 간단히 해결된다.

본인은 7 라인 이전에 기존 main.c 파일의 main 함수 내용을 copy 했다.

다음 실행버튼을 눌러 컴파일을 실시하면 다음과 같이 Error 발생한다.

 

Error 발생하는 Header 파일을 Projects 포함시킨다.

Project 창에서 Headers è 오른쪽 클릭 "Add Existing Files…" 선택한다.

이런식으로 Lib 포함 시킨다.

그러면 .pro 파일은 다음과 같이 표시된다.

 

다음 컴파일을 하여 Error 발생하지 않으면 성공!!!

Error 발생한다면 위와 같은 방법으로 하나씩 Error 잡아가면 된다. -_-;;

Error를 다 잡고 Build RUN 성공적으로 하면, 위에서 만들었던 GUI 나타나면 완성이다.

 

 

본인은 GUI 업데이트 하여 최종적으로 다음과 같이 구현 하였다. 상세한 GUI 구현기는 다음에 계속 하도록 하겠다…. ㅎㅎ

- 끝

 

$ tar zxvf make-4.1.tar.gz
$ cd make-4.1
$ ./configure
$ make
$ sudo make install

Ubuntu 기반 플랫폼에 기가지니인사이드 SDK 설치 및 테스트

기가지니 SDK를 Ubuntu에 설치하여 테스트 하기 위해 하기 링크된 KT 문서를 바탕으로 실행하였다.

참고로 본인 PC에 Vmware(WORKSTATION 15.5 Pro)를 이용 Ubuntu를 설치하여 테스트를 실시하였다. ( 환경 : ubuntu-20.04-desktop-amd64 / cmake v3.16.3 / gcc v9.3.0 / GNU Make 4.2.1)

https://github.com/gigagenie/sample-client-linux-grpc

 

gigagenie/sample-client-linux-grpc

G-INSIDE Linux Sample Client (using gRPC Device SDK) - gigagenie/sample-client-linux-grpc

github.com

위의 설명대로 작업은 크게 다음과 같이 나누어 볼수 있다.

  • 인사이드 클라이언트 키 발급
  • 개발 환경 설정 
  • 필수 라이브러리 및 파일 소스
  • 디렉토리(src/) 내 파일 구성 
  • Linux용 Sample 빌드
  • Sample App 실행

이 중에서 "인사이드 클라이언트 키 발급"은 위에 링크된 KT 문서를 참고로 하면 되므로 Pass하고 나머지 주제들로 글을 써본다.

개발 환경 설정

  • Build Tool 설치

위의 내용을 참고하면 먼저 Build Tool을 설치해야 한다.

$ sudo apt-get install build-essential autoconf automake libtool pkg-config curl make cmake g++ unzip git

Ubuntu에서 Terminal 창을 열고 다음과 같이 위의 cmd를 입력하여 실행하면 쉽게 설치할 수 있다.

설치가 완료되면 하기와 같이 g++ version(Ubuntu gcc)을 확인할 수 있다.

$ g++ -v

 

  • gPRC v1.20.0 및 protobuf 설치

Setup 환경을 하기와 같이 먼저 실행한다.

$ export MY_INSTALL_DIR=$HOME/.local
$ mkdir -p $MY_INSTALL_DIR
$ export PATH="$PATH:$MY_INSTALL_DIR/bin"

Git에서 gRPC v.1.20.0을 받는다.

$ git clone --recurse-submodules -b v1.20.0 https://github.com/grpc/grpc
$ cd grpc
$ make

하지만 여기서 make error가 발생한다.

오류 : error: ambiguating new declaration of ‘long int gettid()’
이유 : GCC 9 리드
솔루션 출처 : 
Github에서 / GRPC : # 20043
해결 방법 : 
src/core/lib/gpr/log_linux.ccsrc/core/lib/gpr/log_posix.ccsrc/core/lib/iomgr/ev_epollex_linux.cc이 파일은
gettid() --> local_gettid() 변경

다시 make를 실행하면 다음과 같이 Error가 또 발생.

Error 내용은 모든 warning을 Error로 처리하면서 발생하는 문제이다.

이 warning을 수정하는게 정석이지만, 일단은 다음과 같이 컴파일러 옵션을 추가하여 문제를 해결한다.

$ export CFLAGS=-Wno-error
$ export CXXFLAGS=-Wno-error

다시 make를 실행하면 문제 없이 compile 될것이다. 

$ make
$ sudo make install
$ cd third_party/protobuf
$ sudo make install

그 다음 위와 같이 make한 결과물을 install 하기 위해 sudo make install을 실행한다.

protobuf를 install 하기 위해 cd third_party/protobuf로 이동 후 sudo make install을 실행한다.

그 다음으로 make install을 입력을 해야하는데, sudo make install이라고 입력을 해야 한다.

그러면 이번 절의 모든 작업이 완료 된다.

 

  • cJSON 설치
$ git clone https://github.com/DaveGamble/cJSON
$ cd cJSON
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR ..
$ make
$ sudo make install

다음과 같이 위의 cmd를 차례대로 실행한다.

그 다음은 make install 명령어를 실행해야 하지만, Error를 회피하기 위해서 sudo make install로 실행을 해야 한다.

  • OpenSSL
$ sudo apt install libssl-dev

하기와 같이 cmd를 실행한다.

  • ALSA library

하기 명령어를 실행하여, 호출어/음성인식을 위한 voice recording 및 미디어 재생을 위해 ALSA 라이브러리를 설치한다.

$ sudo apt-get install libasound2-dev libasound2

 

필수 라이브러리 및 파일

  • SDK 라이브러리

하기 KT의 Ubuntu 라이브러리 링크에서 libginiside.so, libKwsRnet.so 파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/lib/ubuntu-x86_64

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

  • SDK 헤더파일

하기 KT의 Ubuntu SDK 헤더파일 링크에서 ginisde.h, ginsidedef.h 파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/include

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

  • 호출어 모델파일

하기 KT 링크에서 모델파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/conf

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

 

소스 디렉토리(src/) 내 파일 구성

하기 KT 링크에서 sample-client-linux-grpc를 다운로드 후 src/ 로 이동 한다.

github.com/gigagenie/sample-client-linux-grpc

 

gigagenie/sample-client-linux-grpc

G-INSIDE Linux Sample Client (using gRPC Device SDK) - gigagenie/sample-client-linux-grpc

github.com

위의 "필수 라이브러리 및 파일" 섹션에서 다운로드한 파일들을 다음 설명을 참고로 src 폴더 안에 Sub 폴더(conf, include, lib)에 위치 시킨다.

나머지 설명은 참고 사항이다.

  • conf/ : 호출어 모델 파일 저장 위치
  • include/ : SDK용 헤더파일 저장 위치 (ginside.h, ginsidedef.h)
  • lib/ : SDK 라이브러리 저장 위치 (libginside.so, libKwsRnet.so)
  • key.txt : API Link에서 발급받은 개발키 정보를 저장
  • server_info.txt : G-INISDE 개발 서버 정보 저장
  • test_sample.cpp : sample app main 소스

 

Linux용 Sample 빌드

  • sample-client-linux-grpc를 다운로드 후 src/ 로 이동
  • Makefile에서 lpthread, lcjson, lasound 라이브러리와 헤더파일의 위치를 수정한다.
1. cJSON
  - 변경 전
    CFG_INC = -I./include -I/usr/include -I/usr/local/include -I/usr/local/include/cjson
  - 변경 후
    CFG_INC = -I./include -I/usr/include -I/usr/local/include -I/home/mskim/cJSON
  • SDK 라이브러리, 헤더파일, 호출어 모델 파일 등을 lib/, include/, conf/ 디렉토리에 각각 복사하고 Makefile에서 경로 정보를 수정한다.
  • 실제 발급받은 클라이언트 키값을 key.txt 파일에 하기 설명 부분을 지우고 동일한 자리에 입력한다.
YOUR-CLIENT-ID
YOUR-CLIENT-KEY
YOUR-CLIENT-SECRET
  • make 명령어 실행 전에 test_sample.cpp 파일에서 다음 header 파일의 위치를 수정 해야 한다.
#include  "../include/ginside.h"
#include  "../include/ginsidedef.h"
  • $ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH; 입력 후 make를 하면 문제 없이 컴파일 완료
$ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH; 
$ make
  • 컴파일한 실행파일을 실행하는 방법은 다음과 같다.
$ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH;
$ ./test_sample

파일을 실행 후 "지니야"를 호출하면 정상적으로 동작하는 것을 확인 할 수 있다.

물론 마이크와 스피커가 있는 상태에서 말이다. 본인은 우분투 설정에서 노트북 마이크/스피커 설정 후 테스트 함.

- 끝

+ Recent posts