2013-07-11 4 views
4

지난 2 일 나는 성공적으로 Qt를위한 디버그와 릴리스 Oracle 데이터베이스 드라이버를 모두 빌드하려고 노력했습니다. Qt Project (link)에서 제공되는 매뉴얼은 아직까지 완전하지 못하며 실제로는 보이는 것보다 훨씬 복잡합니다. 두 소스부터MinGW가 설치된 Windows에서 Qt QOCI (Oracle 데이터베이스 드라이버)를 빌드하는 방법은 무엇입니까?

이 불완전하고 :

많은 노력 후, 나는 마침내 웹에 일부도 불완전 게시물의 도움으로 DLL을 구축 관리 dll을 만드는 방법을 정확히 가르쳐주지 말고, 나는이 질문에 답함으로써이 방법을 쓸 것이다.

여전히 유일한 의문은 다음과 같습니다. 더 좋은 방법이 있습니까? Qt Project 웹 사이트에 제시된 것처럼 이러한 라이브러리를 컴파일하는 표준 방법은 필자와 다른 사람들이해야 할 모든 수동 작업없이 작동해야한다고 생각합니다. 그래서 나/Qt/다른 것 또는 Qt Project의 매뉴얼이 불완전하고 저것에 대해 뭔가 잘못 됐습니까?

Preliminar 노트 :

답변

4

그래서이 방법으로 할 수 있습니다

내가했다 QtSDK/QtCreator/Qt는 4.8.1 설치, 그래서 내 디렉토리 시스템에서 모두 QtSources 폴더를 가지고뿐만 아니라 32 LIB "데스크탑 용 Qt 4.8.1 (MinGW)"- Qt 사용을 위해 준비된 명령 프롬프트. A는 Oracle 데이터베이스 32에도 "include"및 "lib"폴더가있는 C : \ Oracle \ 폴더가 설치되어 있습니다. "include"에는 oci.h와 같은 .h가 있고 "lib"에는 oci.dll과 같은 .dll과 .lib가 있습니다. 모두 컴파일에 필요합니다. Qt 프로젝트 설명서에 따라 PATH 환경 변수 (컴퓨터 속성 -> 고급 시스템 설정 -> 탭 "고급"-> 환경 변수 -> 시스템 변수 섹션)에 "c : \ oracle \ bin"을 추가합니다.

첫 번째 시도 : % QTDIR %으로

set INCLUDE=%INCLUDE%;c:\oracle\oci\include 
set LIB=%LIB%;c:\oracle\oci\lib\msvc 
cd %QTDIR%\src\plugins\sqldrivers\oci 
qmake oci.pro 
mingw32-make 

: (디버그 lib 디렉토리에 실제로 일)

기본 코드 컴파일는 MinGW 조정 Qt는 프로젝트 웹 사이트, 같이는 다음과 같습니다 하나는 Qt 소스 코드가 위치한 폴더를 의미합니다. 제 경우에는 "C : \ QtSDK \ QtSources \ 4.8.1 \"입니다. 팁 :이 코드를 배치 파일 (name.bat)에 넣으십시오.

첫 번째 문제는 oci.h 및 qsqlcachedresult_p.h 파일이 누락 된 것으로보고되었습니다. 첫 번째는 mingw가 위의 include 폴더를 발견하려고 시도하는 동안 어떤 종류의 문제의 결과이며, 두 번째는 Qt 실수 일 것입니다. qsqlcachedresult_p.h는 실제로 폴더가 누락되어 있습니다.

두 번째 문제는 파일을 복사하여 실제 장소에서 필요한 누락 된 경로에 붙여 넣음으로써 해결되었습니다. "C : \ QtSDK \ QtSources \ 4.8.1 \ src \ sql \ kernel"에 있으며 "C : \ QtSDK \ Desktop \ Qt \ 4.8.1 \ mingw \ include \ QtSql \ private"에 복사해야합니다 ("개인"폴더를 생성해야합니다).

같은 소스에 따르면 첫 번째 문제는 makefile.release 및 makefile의 INCPATH 변수에 Oracle 포함 경로를 배치하여 수정해야합니다.디버그 파일 % QTDIR % \ SRC \ 플러그인 \ sqldrivers \ OCI :

디버그에서

:

INCPATH  = -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" (...) -I"c:\Oracle\include" -I"c:\Oracle\lib\msvc" 

릴리스

에서
INCPATH  = -I"c:\QtSDK\Desktop\Qt\4.8.1\mingw\include\QtCore" (...) -I"c:\Oracle\include" -I"c:\Oracle\lib\msvc" 

(나는 또한 단지 보증의 lib 디렉토리 경로를 넣어).

두 파일을 수동으로 조정할 때의 문제는 다음 번에 "qmake oci.pro"를 입력하면 두 파일이 다시 만들어지고 조정 내용이 손실됩니다. 이제는 Qt Project의 코드를 다시 입력해야하지만 "qmake oci.pro"줄은 입력하지 않아야합니다.

두 번째 시도는 :

이 이루어졌다

, 처음 두 문제를 해결하지만, ld.exe보다 그 -loci합니다 (OCI.DLL 파일) 찾을 수 없습니다보고되었다. 디버그에서

: 릴리스에 대한

LIBS  =  -L"c:\QtSDK\Desktop\Qt\4.8.1\mingw\lib" debug\qsqlocid_resource_res.o -loci -lQtSqld4 -lQtCored4 -L"c:\Oracle\lib\msvc" 

같은이 문제를 해결하기 위해, 나는 LIBS 변수의 OCI lib 디렉토리 경로를 넣어.

세 번째 시도 : 수행이와

("qmake를 oci.pro"없이) Qt는 프로젝트의 코드를 입력 잘 실행됩니다. 유일한 문제는 디버그 라이브러리 만 생성된다는 것입니다. 그래서이 문제를 해결하기 위해, 나는 다음과 같은 수식 위의 단계의 일부를 반복했다 :

  1. 유형은 qmake를 선 원래 Qt는 프로젝트의 코드가 "qmake를 oci.pro"CONFIG + = 릴리스를 ""로 변경.
  2. 전에 완료 한대로 % QTDIR % \ src \ plugins \ sqldrivers \ oci의 makefile.release 파일을 편집하십시오.
  3. Qmake 라인을 사용하지 않고 Qt Project 코드를 다시 입력하십시오.

이제 릴리스 모드 용 dll 및 .a 파일도 % QTDIR % \ src \ plugins \ sqldrivers \ oci의 해당 폴더에서 발견되어야합니다.

마감 :

마지막으로, C로 파일 libqsqloci4.a, qsqloci4.dll (릴리스), libqsqlocid4.a, qsqlocid4.dll (디버그)을 복사 : \ QtSDK \ 바탕 화면 \ Qt를 \ 4.8.1 \와 Mingw \ plugins \ sqldrivers, MinGW가 SQL dll과 함께 작동하도록 폴더가있는 폴더이며 Qt에서 OCI 드라이버를 사용할 수 있어야합니다. 테스트하려면 Qt Creator로 이동하여 다음 또는 이와 유사한 코드를 입력하십시오 :

if (!QSqlDatabase::isDriverAvailable("QOCI")) 
    cout << "FAILURE: No Oracle Database driver available." << endl; 
else 
    cout << "SUCCESS: Oracle Database driver found." << endl; 

튜토리얼 끝. 촬영

결론 : 원래 Qt는 프로젝트 코드의 라인

set INCLUDE=%INCLUDE%;c:\oracle\oci\include 
set LIB=%LIB%;c:\oracle\oci\lib\msvc 

아마 아무것도 도움이되지 않습니다. 또한 원래 코드를 입력하면 디버그 OCI 라이브러리 만 컴파일됩니다.

도움이되기를 바랍니다.

momergil