2014-06-20 89 views
3

iam在Mac OS 10.8上使用QT-Creator作爲IDE編寫QT 5.3的C++應用程序。 問題出現時IAM試圖與QMYSQL驅動程序未加載,嘗試所有提示

db = QSqlDatabase::addDatabase("QMYSQL"); 

它導致

QSqlDatabase: QMYSQL driver not loaded 
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 

加載QMYSQL插件,所以我嘗試

loader.setFileName("/Users/kilian/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib"); 
qDebug() << loader.load(); 
qDebug() << loader.errorString(); 

以獲得更好的輸出

"Die Bibliothek /Users/foob/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib kann nicht geladen werden: 
(dlopen(/Users/foob/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib, 5): 
Library not loaded: libmysqlclient.18.dylib 
Referenced from: /Users/foob/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib 
Reason: image not found)" 

所以,我想otool

otool -L build-$appname-Desktop-Debug/$appname.app/Contents/MacOS/$appname 
build-$appname-Desktop-Debug/$appname.app/Contents/MacOS/$appname: 
/usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) 
/Users/foob/Qt/5.3/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.3.0, current version 5.3.0) 
/Users/foob/Qt/5.3/clang_64/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.3.0, current version 5.3.0) 
/Users/foob/Qt/5.3/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.3.0, current version 5.3.0) 
/Users/foob/Qt/5.3/clang_64/lib/QtSql.framework/Versions/5/QtSql (compatibility version 5.3.0, current version 5.3.0) 
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0) 
/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0) 
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) 
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 

隨着信息,我建立了QMYSQL插件通過自己與

$cd Qt/5.3/Src/qtbase/src/plugins/sqldrivers/mysql/ 

$qmake "INCLUDEPATH+=/usr/local/mysql/include" "LIBS+=-L/usr/local/mysql/lib -lmysqlclient_r" mysql.pro 
$ make 
make -f Makefile.Release all 
make[1]: Nothing to be done for `all'. 
make -f Makefile.Debug all 
make[1]: Nothing to be done for `all'. 
$ make install 
make -f Makefile.Release install 
cp -f "../../../../plugins/sqldrivers/libqsqlmysql.dylib" "/Users/foob/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib" 
cp -f /Users/foob/Qt/5.3/Src/qtbase/lib/cmake/Qt5Sql/Qt5Sql_QMYSQLDriverPlugin.cmake /Users/foob/Qt/5.3/clang_64/lib/cmake/Qt5Sql/ 
make -f Makefile.Debug install 
cp -f "../../../../plugins/sqldrivers/libqsqlmysql_debug.dylib" "/Users/foob/Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib" 
cp -f /Users/foob/Qt/5.3/Src/qtbase/lib/cmake/Qt5Sql/Qt5Sql_QMYSQLDriverPlugin.cmake /Users/foob/Qt/5.3/clang_64/lib/cmake/Qt5Sql/ 

Everythink似乎罰款,我設置較早DYLD_LIBRARY_PATH在/ etc/profile文件 出口DYLD_LIBRARY_PATH =的/ usr /本地/ MySQL的/ lib目錄下:$ DYLD_LIBRARY_PATH

echo $DYLD_LIBRARY_PATH 

結果

/usr/local/mysql/lib: 

該文件夾的/ usr /本地/ MySQL的/ lib目錄下:

$ls -lisa /usr/local/mysql/lib/ 
total 556840 
2147230  0 drwxr-xr-x 12 root wheel  408 21 Jun 00:01 . 
2147093  0 drwxr-xr-x 17 root wheel  578 21 Jun 00:01 .. 
2147231 8384 -rwxr-xr-x 1 root wheel 4289380 6 Mai 13:18 libmysqlclient.18.dylib 
2147232 20744 -rw-r--r-- 1 root wheel 10620040 6 Mai 13:18 libmysqlclient.a 
2147233  8 lrwxr-xr-x 1 root wheel   23 21 Jun 00:01 libmysqlclient.dylib -> libmysqlclient.18.dylib 
2147234  8 lrwxr-xr-x 1 root wheel   23 21 Jun 00:01 libmysqlclient_r.18.dylib -> libmysqlclient.18.dylib 
2147235  8 lrwxr-xr-x 1 root wheel   16 21 Jun 00:01 libmysqlclient_r.a -> libmysqlclient.a 
2147236  8 lrwxr-xr-x 1 root wheel   20 21 Jun 00:01 libmysqlclient_r.dylib -> libmysqlclient.dylib 
2147237 261360 -rw-r--r-- 1 root wheel 133814816 6 Mai 13:08 libmysqld-debug.a 
2147239 266288 -rw-r--r-- 1 root wheel 136335512 6 Mai 13:18 libmysqld.a 
2147240  32 -rw-r--r-- 1 root wheel  14544 6 Mai 13:18 libmysqlservices.a 
2147241  0 drwxr-xr-x 17 root wheel  578 6 Mai 13:21 plugin 

使用.pro文件IAM的相關部分

macx: { 
INCLUDEPATH += /usr/local/mysql/include \ 
       /Users/foob/Qt/5.3/clang_64/include 
} 

macx: { 
LIBS += -L/usr/local/mysql/lib -lmysqld -lmysqlclient -v 
} 

沒有人有一個提示什麼IAM做錯了什麼?

P.S.我更改了用戶名爲隱私的用戶&。

回答

0

解決了這個問題,並沒有意識到它也可以使用otool和install_name_tool作爲dylib。 只需使用

install_name_tool -change libqsqlmysql_debug.dylib /Users/foob/Qt/5.3/Src/qtbase/plugins/sqldrivers/libqsqlmysql_debug.dylib Qt/5.3/clang_64/plugins/sqldrivers/libqsqlmysql_debug.dylib 

現在,它的工作原理做了。有誰知道爲什麼這些庫不是第一個找到的?我檢查了由qmake生成的Makefile,看起來很好。奇怪的Mac ...

相關問題