[C++,QT/Qml]35.Qt 프로세스간의 통신(IPC) 구현하기4(나의 qt프로젝트에 commonapi 라이브러리 포팅하기)
안녕하세요 고급 프로그래머가 꿈인 코린이 입니다.
오늘은 여태까지 구현했던 commonapi-dbus 라이브러리를 이용해서 프로세스간의 통신을 하는 내용을 제가 만든
qt프로젝트에 포팅하는 방법에 대해서 다루어 보겠습니다.
제가 만든 qt프로젝트에 프로세스간 통신을 구현 하기위해서는 여태까지 만든 소스코드와 라이브러리를 qt프로젝트에
포함을 시켜주어야 합니다. commonapi-core라이브러리와 dbus라이브러리 commonapi-dbus라이브러리 등을 사용하기
때문에 제가만든 qt프로젝트에 이러한 라이브러리들을 포팅해야지 qt프로젝트에서 commonapi를 이용한 프로세스간
통신을 구현할수 있습니다.
그런데 항상 qt를 다루다 보면은 qt에 대한 자료가 부족하다 보니 qt프로젝트에 라이브러리를 포팅하는
자료를 찾기도 힘들고 저도 따로는 포팅을 해본적도 없고 그래서 이렇게 포스팅 하게 되었습니다.
그렇다면 이제 자신이 만든 qt프로젝트를 만들고 이전에 구현했던 src-gen 소스코드를 프로젝트에 추가해 주시고
아래처럼 .pro파일을 열어서 보도록 하겠습니다.
위의 이미지를 보시면 .pro파일 내용 안에서 마우스 오른쪽 클릭해 주면 메뉴가 이미지 처럼 나옵니다.
여기서 Add Library... 라는 메뉴가 있는데요 이 add Library 메뉴를 클릭해 줍니다.
add Library라는 메뉴를 클릭해주면 아래와 같은 화면이 나오는데요
여기서 아래와 같이 선택해 주는데요
그다음 저희는 commonapi-core-runtime, commonapi-dbus-runtime 및 dbus 라이브러리등 외부 라이브러리를 포팅할
예정이기 때문에 외부라이브러리 즉 external library를 선택해 주고 다음을 눌러 줍니다.
다음을 눌러주면 아래와 같은 화면이 출력됩니다.
그리고 아래 화면의 각 내용을 설명 드리겠습니다.
위의 이미지를 보시면 저희가 설정할 library file 과 include path등이 있습니다.
이 library file에는 라이브러리 파일 즉 .so로 끝나는 파일이나 .a로 끝나는 파일을 말합니다.
그리고 include path는 이 라이브러리의 인터페이스 즉 헤더 파일을 가져와서 라이브러리를 사용할수 있도록 include
path를 설정해 줍니다. 헤더 파일에는 함수 선언부가 있고 cpp파일에는 구현 부가 있으므로 헤더파일을 가져와서
구현부 즉 라이브러리를 사용할수 있도록 포함 시켜주는 내용 입니다.
그래서 각 라이브러리를 빌드해서 so파일을 만들었던 경로와 그 라이브러리들의 include path를 추가하면 되는데요
이부분은 commonapi-dbus 통신하는 내용에서 cmake list를 보고 추가하시면 됩니다.
아래 commonapi-dbus 통신하는 내용의 cmakelist를 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x")
include_directories(
src-gen
../capicxx-core-runtime/include
../capicxx-dbus-runtime/include
../dbus-1.13.12
)
link_directories(
/home/shin/dbus-commonapi/capicxx-core-runtime/build
/home/shin/dbus-commonapi/capicxx-dbus-runtime/build
/home/shin/dbus-commonapi/dbus-1.13.12/dbus/.libs
)
add_executable(HelloWorldClient
src/HelloWorldClient.cpp
src-gen/v1/commonapi/HelloWorldDBusProxy.cpp
src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp
)
target_link_libraries(HelloWorldClient CommonAPI CommonAPI-DBus dbus-1)
add_executable(HelloWorldService
src/HelloWorldService.cpp
src/HelloWorldStubImpl.cpp
src-gen/v1/commonapi/HelloWorldDBusStubAdapter.cpp
src-gen/v1/commonapi/HelloWorldStubDefault.cpp
src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp
)
target_link_libraries(HelloWorldService CommonAPI CommonAPI-DBus dbus-1)
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
위의 cmake list를 보시면 link_directories 와 include_directories들이있습니다.
이 내용의 link_directoriespath 안의 so파일이나 .a파일을 위의 qt 프로젝트의 library file에 넣어주면 되고
include_directories 안의 내용중 src-gen을 제외하고 위의 qt프로젝트 에서의 Include path에 넣어주면 됩니다.
capicxx-core-runtime, capicxx-dbus-runtime ,dbus-1.13.12 이 세가지의 라이브러리들을 위의 add library를 이용해서
추가해주시면 자신이 만든 qt project에 라이브러리들이 포팅이 됩니다.
이렇게 되면 자신이 만든 qt project에서 commonapi 라이브러리등을 참조할수가 있고 사용할수 있게 됩니다.
그런데 막상 이렇게 라이브러리들을 등록하고 나고도 빌드를 하면 commonapi쪽 위치를 찾을수 없다는
빌드 에러가 나오게 됩니다. 아래 이미지 처럼 빌드 나오는데요
이 에러가 발생하는 이유는 v1/commonapi/HellWorldDbusDeployment.hpp 파일의 경로가 현제 프로젝트의
src-gen 디렉토리 안에 있는데 src-gen이라는 디렉토리의 경로 추가가 안되어 있어서 나는 에러 입니다.
그렇기 때문에 .pro파일에서 src-gen이라는 디렉토리를 프로젝트 패스에 추가하면 됩니다.
아래와 같이 .pro파일에 추가 하시면 됩니다.
1
2
3
4
|
_ROOT = $$_PRO_FILE_PWD_ #.pro .pro 파일이 있는 위치
INCLUDEPATH += $$_ROOT/src-gen #자신의 프로젝트에서 풀경로로 안해도 경로를 찾아 줄수 있도록 추가하는 부분
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
그리고 아래내용은 .pro파일의 전체 내용 입니다. 혹시나 필요하신 분이 있으실것 같아서 전체 내용을 올리겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
QT += quick quickcontrols2
CONFIG += c++11 dbus ## add shin dbus
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
_ROOT = $$_PRO_FILE_PWD_ #.pro .pro 파일이 있는 위치
INCLUDEPATH += $$_ROOT/src-gen #자신의 프로젝트에서 풀경로로 안해도 경로를 찾아 줄수 있도록 추가하는 부분
SOURCES += main.cpp \
ConnectEvent.cpp \
src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp \
src-gen/v1/commonapi/HelloWorldDBusProxy.cpp \
src-gen/v1/commonapi/HelloWorldDBusStubAdapter.cpp \
src-gen/v1/commonapi/HelloWorldStubDefault.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
ConnectEvent.h \
AllEnum.hpp \
src-gen/v1/commonapi/HelloWorld.hpp \
src-gen/v1/commonapi/HelloWorldDBusDeployment.hpp \
src-gen/v1/commonapi/HelloWorldDBusProxy.hpp \
src-gen/v1/commonapi/HelloWorldDBusStubAdapter.hpp \
src-gen/v1/commonapi/HelloWorldProxy.hpp \
src-gen/v1/commonapi/HelloWorldProxyBase.hpp \
src-gen/v1/commonapi/HelloWorldStub.hpp \
src-gen/v1/commonapi/HelloWorldStubDefault.hpp
DISTFILES +=
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/capicxx-core-runtime/build/release/ -lCommonAPI
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/capicxx-core-runtime/build/debug/ -lCommonAPI
else:unix: LIBS += -L$$PWD/../../dbus-commonapi/capicxx-core-runtime/build/ -lCommonAPI
INCLUDEPATH += $$PWD/../../dbus-commonapi/capicxx-core-runtime/include
DEPENDPATH += $$PWD/../../dbus-commonapi/capicxx-core-runtime/include
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/capicxx-dbus-runtime/build/release/ -lCommonAPI-DBus
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/capicxx-dbus-runtime/build/debug/ -lCommonAPI-DBus
else:unix: LIBS += -L$$PWD/../../dbus-commonapi/capicxx-dbus-runtime/build/ -lCommonAPI-DBus
INCLUDEPATH += $$PWD/../../dbus-commonapi/capicxx-dbus-runtime/include
DEPENDPATH += $$PWD/../../dbus-commonapi/capicxx-dbus-runtime/include
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/dbus-1.13.12/dbus/.libs/release/ -ldbus-1
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../dbus-commonapi/dbus-1.13.12/dbus/.libs/debug/ -ldbus-1
else:unix: LIBS += -L$$PWD/../../dbus-commonapi/dbus-1.13.12/dbus/.libs/ -ldbus-1
INCLUDEPATH += $$PWD/../../dbus-commonapi/dbus-1.13.12
DEPENDPATH += $$PWD/../../dbus-commonapi/dbus-1.13.12
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
여기까지 자신의 qt프로젝트에 라이브러리 포팅하는 방법에 대해서 다루어 보았습니다.
다음 포스팅에서는 서버에서 브로드 캐스트를 하면 제 qt프로젝트에서 그에 따른 화면 전환이나 팝업 등을 출력하는
내용을 다루어 보겠습니다.
여기 까지 읽어주셔서 감사합니다.!