2012-08-23 46 views
0

我正在使用swig将java包装为QT应用程序(使用JNI),所有过程都顺利进行,直到它引发异常undefined QApplication Exception。
我的问题是JVM无法找到QApplication的库,如果我加载QApplication的* .so(共享对象)我以某种方式设法消除此错误。
请告诉我在哪里可以找到QApplication的* .so(共享对象)
预先感谢您。哪个Qt库包含QApplication

//mohan.cpp 
#include <QApplication> 
#include <QPushButton> 
int initQ() 
{ 
    char *argv[2]; 
    argv[0]="name"; 
    argv[1]="texteditapplication"; 
    int argc=2; 
    QApplication app(argc, argv); 

    QPushButton hello("Hello world!"); 
    hello.resize(100, 30); 

    hello.show(); 
    return app.exec(); 
} 

//mohan.i 
%module mohan 

%{ 
/* Put headers and other declarations here */ 
#include <QApplication> 
#include <QPushButton> 
int initQ(); 
%} 
extern int initQ(); 

//runme.java 
public class runme { 
    static { 
System.out.println(System.getProperty("java.library.path")); 
System.loadLibrary("mohan"); 
    } 

    public static void main(String argv[]) { 
    System.out.println(mohan.initQ()); 
    System.out.println(); 
    } 
} 

//执行

[[email protected] mohan]$ g++ -fpic -c mohan.cpp mohan_wrap.cxx -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/media/mohan/QtSDK/Desktop/Qt/474/gcc/mkspecs/default -I. -I/media/mohan/QtSDK/Desktop/Qt/474/gcc/include/QtCore -I/media/mohan/QtSDK/Desktop/Qt/474/gcc/include/QtGui -I/media/mohan/QtSDK/Desktop/Qt/474/gcc/include -I. -I. -I/usr/java/jdk1.6.0_33/include/ -I/usr/java/jdk1.6.0_33/include/linux/ 

[[email protected] mohan]$ g++ -shared mohan.o mohan_wrap.o -o libmohan.so 
[[email protected] mohan]$ javac runme.java 
[[email protected] mohan]$ java -Djava.library.path=. runme 
. 
java: symbol lookup error: /home/mohan/Desktop/mohan/libmohan.so: undefined symbol: _ZN12QApplicationC1ERiPPci 

_ZN12QApplicationC1ERiPPci -> **QApplication** 
+0

最有可能QtCore。 – arrowd

+0

@arrowdodger不,'QtCore'具有'QCoreApplication',用于控制台应用程序。由于'QApplication'用于GUI应用程序,它应该在'QtGui'中。 –

回答

3

QtMain和QtCore几乎总是与QtGui沿需要GUI应用