Programming/QT

[QT] CentOS 7 환경에서 QOCI (Oracle DB) Driver 빌드

2021. 6. 28. 18:34
목차
  1. QT 설치
  2. Oracle SDK
  3. 빌드
  4. 테스트

필수 환경

QT 설치

QT 공식홈페이지 에서 QT를 다운로드 받아 설치한다.

설치 과정 중 필수로 Source 를 선택하여 QT소스코드가 함께 설치되도록한다.

본 게시글에서는 QT 5.9.1 버전을 사용한다.

설치 경로는 /opt/Qt5.9.1 이다.

Oracle SDK

Oracle Instant Client 에서 Oracle Instant Client를 다운받는다.

  • Basic Package (ZIP)
  • SDK Package (ZIP)

본 게시글에서는 21.1.0.0.0 버전을 사용하였다.

Basic Package는 /opt/instantclient, SDK Package 는 opt/instantclient/sdk 에 압축 해제 하였다.

빌드

OCI의 소스코드가 위치한 경로로 이동한다.

cd /opt/Qt5.9.1/5.9.1/Src/qtbase/src/plugins/sqldrivers/oci

이동 후, oci.pro 파일의 내용을 수정한다.

TARGET = qsqloci
HEADERS += $$PWD/qsql_oci_p.h
SOURCES += $$PWD/qsql_oci.cpp $$PWD/main.cpp
#QMAKE_USE += oci
darwin:QMAKE_LFLAGS += -Wl,-flat_namespace,-U,_environ
OTHER_FILES += oci.json
PLUGIN_CLASS_NAME = QOCIDriverPlugin
CONFIG += c++11
INCLUDEPATH += /opt/instantclient/sdk/include
DEPENDPATH += /opt/instantclient/
LIBS += -L"/opt/instantclient" -lclntsh
include(../qsqldriverbase.pri)

MakeFile을 생성한다.

qmake

CentOS 7의 기본 GCC 버전이 4.8이므로, 바로 빌드 시 -Wdate-time 및 c++1z 오류가 발생한다.

g++: error: unrecognized command line option '-std=c++1z' g++: error: unrecognized command line option '-Wdate-time'

따라서, MakeFile 의 내용을 수정한다

  • c++1z -> c++11
  • -Wdate-time -> `` (제거)

이후, 빌드를 수행한다.

make

빌드 로그가 콘솔에 출력되며, 빌드 성공 시 ../plguins/sqldrivers/(/opt/Qt5.9.1/5.9.1/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers) 폴더에 libqsqloci.so 파일이 생성된다.

생성된 libqsqloci.so 파일을 추가한다.

cd /opt/Qt5.9.1/5.9.1/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
cp libqsqloci.so /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers

테스트

OCI의 설치가 완료되면, 테스트용 프로젝트를 생성하여 빌드 후 테스트를 진행한다.

프로젝트 파일

oratest.tar.gz
503 B

test.cpp*

#include <QtSql>
int main() {
QSqlDatabase mes_db;
mes_db = QSqlDatabase::addDatabase("QOCI","TEST");
mes_db .setHostName("localhost");
mes_db .setPort(1521);
mes_db .setUserName("test");
mes_db .setPassword("test");
mes_db .setDatabaseName("orcl");
if(!mes_db .open()){
qDebug()<<"open false";
}else {
qDebug()<<"open db";
}
}

첨부된 압축파일의 압축 해제 후, test.cpp에서, oracle의 접속정보를 현재 설정된 상태와 맞게 변경 한 뒤, 빌드 및 실행한다.

open db 가 출력되면, 정상적으로 작업이 완료되었음을 의미하며, open false 출력 시 접속 정보가 잘못되었음을 의미한다.

Plugin이 잘 로드되었는지 확인하기 위해선, 아래 사진과 같이 Run Environment에 QT_DEBUG_PLUGINS 를 1로 설정한다.

실행결과

QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib64/kde4/plugins/sqldrivers" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/kde4/plugins/sqldrivers" ...
QFactoryLoader::QFactoryLoader() checking directory path "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers" ...
QFactoryLoader::QFactoryLoader() looking at "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlite.so"
Found metadata in lib /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlite.so, metadata=
{
"IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
"MetaData": {
"Keys": [
"QSQLITE"
]
},
"className": "QSQLiteDriverPlugin",
"debug": false,
"version": 329985
}
Got keys from plugin meta data ("QSQLITE")
QFactoryLoader::QFactoryLoader() looking at "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so"
Found metadata in lib /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so, metadata=
{
"IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
"MetaData": {
"Keys": [
"QMYSQL3",
"QMYSQL"
]
},
"className": "QMYSQLDriverPlugin",
"debug": false,
"version": 329985
}
Got keys from plugin meta data ("QMYSQL3", "QMYSQL")
QFactoryLoader::QFactoryLoader() looking at "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqloci.so"
Found metadata in lib /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqloci.so, metadata=
{
"IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
"MetaData": {
"Keys": [
"QOCI8",
"QOCI"
]
},
"className": "QOCIDriverPlugin",
"debug": false,
"version": 329985
}
Got keys from plugin meta data ("QOCI8", "QOCI")
QFactoryLoader::QFactoryLoader() looking at "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlpsql.so"
Found metadata in lib /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlpsql.so, metadata=
{
"IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
"MetaData": {
"Keys": [
"QPSQL7",
"QPSQL"
]
},
"className": "QPSQLDriverPlugin",
"debug": false,
"version": 329985
}
Got keys from plugin meta data ("QPSQL7", "QPSQL")
loaded library "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqloci.so"
open db
QLibraryPrivate::unload succeeded on "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqloci.so"

위와 같이

Got keys from plugin meta data ("QOCI8", "QOCI")
QFactoryLoader::QFactoryLoader() looking at "/opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlpsql.so"
Found metadata in lib /opt/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers/libqsqlpsql.so, metadata=
{
"IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
"MetaData": {
"Keys": [
"QPSQL7",
"QPSQL"
]
},
"className": "QPSQLDriverPlugin",
"debug": false,
"version": 329985
}

QOCI 관련 메시지가 출력되면, 정상적으로 Driver가 로드된 것이다.

저작자표시 (새창열림)

'Programming > QT' 카테고리의 다른 글

[QT] Windows에서 QOCI (Oricle DB) Driver 빌드  (0) 2021.09.10
[QT] QOCI를 이용한 CLOB 데이터 insert중 ORA-03113 (EOF) 오류 발생 대처법  (0) 2021.06.30
[QT] static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE  (0) 2019.06.25
[QT] C++ std::string과 QString 간의 문자열 형 변환 방법  (0) 2019.06.18
[QT] QObject::connect: Cannot queue arguments of type 'Type Name'  (0) 2019.06.12
[QT] QByteArray를 QJsonValue로 변환하기  (0) 2019.05.16
[QT] QDockWidget의 위치 및 상태 저장  (1) 2019.05.14
[QT] 프로그램 실행 시 모니터 지정 및 풀스크린 실행  (0) 2019.05.09
  1. QT 설치
  2. Oracle SDK
  3. 빌드
  4. 테스트
'Programming/QT' 카테고리의 다른 글
  • [QT] Windows에서 QOCI (Oricle DB) Driver 빌드
  • [QT] QOCI를 이용한 CLOB 데이터 insert중 ORA-03113 (EOF) 오류 발생 대처법
  • [QT] static assertion failed: Type is not registered, please use the Q_DECLARE_METATYPE
  • [QT] C++ std::string과 QString 간의 문자열 형 변환 방법
후유증
후유증
후유증
개인공간
후유증
전체
오늘
어제
  • 분류 전체보기 (66)
    • Tools (3)
      • vscode (1)
    • Programming (39)
      • Android (5)
      • C & C++ (13)
      • QT (10)
      • C# (4)
      • JAVA (1)
      • JS (5)
    • 잡다 (4)
    • OS (10)
      • Linux (9)
    • Code (6)
      • git (4)
      • svn (2)
    • DB (4)

인기 글

최근 댓글

최근 글

태그

  • QOCI
  • C++
  • Linux
  • JS
  • javascript
  • 사용자제어
  • C
  • 접근제어
  • QT
  • Remote
  • oracle
  • SVN
  • error
  • git
  • db
hELLO · Designed By 정상우.
후유증
[QT] CentOS 7 환경에서 QOCI (Oracle DB) Driver 빌드
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.