2013-03-01 61 views
0

我想使用MinGW工具链为Qt构建Interbase插件。 据Qt documentation,我只能通过MSVC做到这一点,但我需要MinGW的...所以,我写了这个.cmd文件Howto使用MinGW为Qt构建Interbase插件

set QTDIR=C:\Qt\4.8.0-minGW 
set PATH=C:\Qt\4.8.0-minGW\bin 
set PATH=%PATH%;C:\MinGW\bin 
set QMAKESPEC=win32-g++ 

set INCLUDE=%INCLUDE%;c:\Program Files\Borland\InterBase\SDK\include 
set LIB=%LIB%;c:\Program Files\Borland\InterBase\SDK\lib_ms 
qmake -o Makefile ibase.pro 
mingw32-make.exe 
pause 

c:\Qt\4.8.0-minGW\src\plugins\sqldrivers\ibase\运行它。全输出很长,但有很多类似的线,这就是为什么我会告诉只是其中之一,并最终线

tmp/obj/debug_shared/qsql_ibase.o: In function `ZN12QIBaseDriver24qHandleEventNo 
tificationEPv': 
C:\Qt\4.8.0-minGW\src\plugins\sqldrivers\ibase/../../../sql/drivers/ibase/qsql_i 
base.cpp:1845: undefined reference to `isc_event_counts' 
C:\Qt\4.8.0-minGW\src\plugins\sqldrivers\ibase/../../../sql/drivers/ibase/qsql_i 
base.cpp:1864: undefined reference to `isc_que_events' 
collect2: ld returned 1 exit status 
mingw32-make.exe: *** [debug-all] Error 2 

你能告诉我,我应该怎么achive我的目标。谢谢。

P.S.我googled了很多,看到这个quiestion - Compiling InterBase support in Qt - 但没有确切的答案该怎么办...

回答

0

我已经做到了!

问题出在Interbase SDK的头文件ibase.h上。有以下几行:

#if (defined(_MSC_VER) && defined(_WIN32)) || \ 
    (defined(__BORLANDC__) && (defined(__WIN32__) || defined(__OS2__))) 
... 
#define ISC_EXPORT __stdcall 
... 

ISC_EXPORT未定义,并且所有函数的声明都是错误的。当我在下面的方式改变了这些行:

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) 
... 
#define ISC_EXPORT __stdcall 
... 

插件是successfuly建立