필수 환경
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의 설치가 완료되면, 테스트용 프로젝트를 생성하여 빌드 후 테스트를 진행한다.
프로젝트 파일
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 |