2015-07-24 7 views
7

मैं एक क्यूटी गतिशील lib एक SQLite डेटाबेस को खोलने के लिए क्यूटी एसक्यूएल का उपयोग करता है बनाने के बाद लोड नहीं है, लेकिन मैं इस त्रुटि हो रही है:क्यूटी सी ++ एंड्रॉयड ग्रहण परियोजना में पुस्तकालय: QSQLITE ड्राइवर

QSqlDatabase: QSQLITE driver not loaded 
QSqlDatabase: available drivers: 

DLL एक क्यूटी एंड्रॉइड एप्लिकेशन के हिस्से के रूप में ठीक काम कर रहा था, हालांकि मुझे ग्रहण में विकसित एक मौजूदा जावा एप्लिकेशन से जेएनआई के माध्यम से इसका उपयोग करने की आवश्यकता है।

यह सबसे छोटा उदाहरण कोड है जो समस्या को पुन: उत्पन्न करता है। मैं जावा से लाइब्रेरी लोड और उसके init() विधि कॉल:

System.loadLibrary("plugins_sqldrivers_libqsqlite"); 
System.loadLibrary("Qt5Sql"); 
System.loadLibrary("MyQtLib"); 
MyQtLib.init(); 

और क्यूटी पुस्तकालय के अंदर मैं सिर्फ QSqlDatabase :: addDatabase (फोन):

JNIEXPORT void JNICALL Java_test_MyQtLib_foo(JNIEnv *, jclass) 
{ 
    // Manually create a QCoreApplication instance. 
    int argc = 1; 
    static char arg[] = ""; 
    static char *arg2 = arg; 
    app = new QCoreApplication(argc, &arg2); 
    // Try to add an SQLite db connection. 
    QSqlDatabase::addDatabase("QSQLITE"); 
} 

के बाद से त्रुटि QSQLITE driver not loaded है, और क्यूटी पुस्तकालय एक क्यूटी अनुप्रयोग के अंदर काम कर रहा था, मुझे लगता है कि क्यूटी कुछ प्रारंभिक कार्य कर रहा है जिसे मैं याद कर रहा हूं।

लेकिन इसने त्रुटि को नहीं हटाया, इसलिए यह कुछ और होना चाहिए। आम तौर पर, कुछ प्रारंभ करने के लिए क्यूटी एप्लिकेशन QtApplication.java और QtActivity.java का उपयोग करेगा, इसलिए उन्हें कुछ और करना होगा जो मैं नहीं कर रहा हूं।

+0

आपकी मदद कर सकता है ... http://stackoverflow.com/questions/15944120/how-to-install-mysql-c-driver-on-windows – AngryDuck

+0

@AngryDuck लिंक के लिए धन्यवाद, लेकिन मुझे नहीं मिला त्रुटि संदेश को छोड़कर मेरे प्रश्न के लिए प्रासंगिक कुछ भी वही है। यह लड़का एंड्रॉइड की बजाय विंडोज पर है, और उसका उपयोग-परिदृश्य पूरी तरह से अलग है - वह किसी मौजूदा ग्रहण एंड्रॉइड प्रोजेक्ट में क्यूटी साझा लाइब्रेरी लोड नहीं करता है। क्या आपके पास लिंक पोस्ट करने का कोई विशिष्ट कारण है, यानी मुझे कुछ याद आ रहा है? – sashoalm

उत्तर

4

आखिरकार मैंने क्यूटी स्रोतों में कदम रखा ताकि यह देखने के लिए कि SQLITE प्लगइन कैसे लोड किया गया है (डेस्कटॉप कम से कम निर्माण के लिए)।

प्रासंगिक कार्य QFactoryLoader::update() था। इस रिपोर्ट में मैंने देखा है कि यह QCoreApplication::libraryPaths() में सभी निर्देशिकाओं iterates:

QStringList paths = QCoreApplication::libraryPaths(); 
for (int i = 0; i < paths.count(); ++i) { 

तो उनमें से किसी को किसी उप-निर्देशिका "sqldrivers" नाम है, यह इसके अंदर चला जाता है और कि उप में सभी गतिशील पुस्तकालयों लोड करने के लिए कोशिश करता है निर्देशिका।

फिर मैंने क्यूटी निर्माता - qDebug() << a.libraryPaths(); से सीधे चलाए गए एक परीक्षण प्रोजेक्ट में लाइब्रेरी पथ मुद्रित किए, और मैंने यह पथ देखा - /data/data/org.qtproject.example.untitled/qt-reserved-files/plugins। मेरे एंड्रॉइड फोन पर इस निर्देशिका में sqldrivers नामक एक उपनिर्देशिका थी, जिसमें एक फ़ाइल - libqsqlite.so थी।

मैं तो जावा फ़ाइलों की जाँच की, और वास्तव में QtActivity::startApp() पुस्तकालय पथ जोड़ता है:

boolean bundlingQtLibs = false; 
if (m_activityInfo.metaData.containsKey("android.app.bundle_local_qt_libs") 
    && m_activityInfo.metaData.getInt("android.app.bundle_local_qt_libs") == 1) { 
    localPrefix = getApplicationInfo().dataDir + "/"; 
    pluginsPrefix = localPrefix + "qt-reserved-files/"; 
    cleanOldCacheIfNecessary(localPrefix, pluginsPrefix); 
    extractBundledPluginsAndImports(pluginsPrefix); 
    bundlingQtLibs = true; 
} 

समाधान तो सुनिश्चित करने के लिए है कि वहाँ एक sqldrivers/libqsqlite.so कहीं फोन पर किया जाएगा, और फिर मूल फ़ोल्डर जोड़ने QCoreApplication::addLibraryPath() का उपयोग कर लाइब्रेरी पथ पर sqldrivers का।

+0

दोस्त आपने मेरी जिंदगी बचाई। मुझे एक ही समस्या थी और कई दिनों तक अवरुद्ध रहा। आपकी पोस्ट मुझे बहुत मदद करती है बहुत बहुत धन्यवाद !!!! – suns9

+0

मैं कई दिनों भी अवरुद्ध रहा। अंत में मैंने सोचा कि अगर यह कम से कम एक व्यक्ति की मदद करता है तो यह पोस्टिंग के लायक है, इस समस्या पर अवरोधक कितना था। हालांकि आप एसओ मारने से पहले कई दिनों क्यों इंतजार कर रहे थे? – sashoalm

+0

क्योंकि मैंने ड्राइवर तैनाती भाग को समझने के लिए बार-बार क्यूटी दस्तावेज़ पढ़ना शुरू कर दिया था। लेकिन पढ़ने के कुछ दिनों बाद मेरी स्थिति को अनवरोधित नहीं किया। मैंने अपने ऐप में एसक्लाइट 3 का उपयोग करने की भी कोशिश की लेकिन मेरे ऐप के मूल भाग में आयात करना भी मुश्किल था – suns9

संबंधित मुद्दे