MySQL driver detected but not loading on MacOS
-
@artwaw Hi,
I dont have any Postgres files' *.dylib in my app dir and my app/Contents/Plugins/sqldrivers/ folder dont have libqsqlpsql.dylib, only libqsqlite.dylib libqsqlodbc.dylib and libqsqlpsql.dylib.
Where to make it create this dylib or where to copy it ? Which dylibs are postgresql needed?
Thanks!@juneleung Like @SGaist said. It is old and well know problem (I really thought addressed by now) that the plugin links to Postgres installation, somewhere in
/Application/Postgres.app/[...]/libpq.5.dylib
and in order to deploy the program properly one has to dabble and relink. I got annoyed and bored and semiautomated the deployment as above (I also wrote myself some script tools for signing and notarisation, because lack of integration is prevalent on macOS).Nonetheless - once you get hang on the particular quirks like this one, deploying on macOS is a relative breeze.
-
@juneleung Like @SGaist said. It is old and well know problem (I really thought addressed by now) that the plugin links to Postgres installation, somewhere in
/Application/Postgres.app/[...]/libpq.5.dylib
and in order to deploy the program properly one has to dabble and relink. I got annoyed and bored and semiautomated the deployment as above (I also wrote myself some script tools for signing and notarisation, because lack of integration is prevalent on macOS).Nonetheless - once you get hang on the particular quirks like this one, deploying on macOS is a relative breeze.
Hi, I use these cmd :
cp /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.14.dylib /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/Frameworks/ install_name_tool -change /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib test/Contents/PlugIns/sqldrivers**/libqsqlpsql.dylib** install_name_tool -change libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib test.app/Contents/MacOS/test
but an error with I don't have the libqsqlpsql.dylib in sqldrivers folder, and i can't found it in Applications/Postgres.app/Contents/Versions/14/lib/, where to find libqsqlpsql.dylib or how to make it generated automaticly by qt?
-
Might be a silly question but are you using the SQL module in your test app ?
-
@SGaist yes i have add sql in qt.
QT += sql QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
The release package installed in local Macbook can open and link to sqldatabase, but move to another mac will get wrong driver.
Does I miss any steps when release packages?
-
Hi, I use these cmd :
cp /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.14.dylib /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/Frameworks/ install_name_tool -change /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib test/Contents/PlugIns/sqldrivers**/libqsqlpsql.dylib** install_name_tool -change libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib test.app/Contents/MacOS/test
but an error with I don't have the libqsqlpsql.dylib in sqldrivers folder, and i can't found it in Applications/Postgres.app/Contents/Versions/14/lib/, where to find libqsqlpsql.dylib or how to make it generated automaticly by qt?
@juneleung said in MySQL driver detected but not loading on MacOS:
I don't have the libqsqlpsql.dylib in sqldrivers folder, and i can't found it in Applications/Postgres.app/Contents/Versions/14/lib/, where to find libqsqlpsql.dylib or how to make it generated automaticly by qt?
That what's macdeployqt should do, if memory serves. Important - can't
mybe with option App Store compatible. It is Qt plugin, should be deployed. -
@juneleung said in MySQL driver detected but not loading on MacOS:
I don't have the libqsqlpsql.dylib in sqldrivers folder, and i can't found it in Applications/Postgres.app/Contents/Versions/14/lib/, where to find libqsqlpsql.dylib or how to make it generated automaticly by qt?
That what's macdeployqt should do, if memory serves. Important - can't
mybe with option App Store compatible. It is Qt plugin, should be deployed.@artwaw said in MySQL driver detected but not loading on MacOS:
That what's macdeployqt should do, if memory serves. Important - can't my with option App Store compatible. It is Qt plugin, should be deployed.
my macdeployqt step is :
macdeployqt /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app -dmgany args should added to generate libqsqlpsql.dylib? or any step to setup at release mode?
Thanks! -
@artwaw said in MySQL driver detected but not loading on MacOS:
That what's macdeployqt should do, if memory serves. Important - can't my with option App Store compatible. It is Qt plugin, should be deployed.
my macdeployqt step is :
macdeployqt /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app -dmgany args should added to generate libqsqlpsql.dylib? or any step to setup at release mode?
Thanks!@juneleung Pls check your package under path:
ls test.app/Contents/PlugIns/sqldrivers libqsqlite.dylib libqsqlodbc.dylib libqsqlpsql.dylib
That's how it should be after the deploy.
You can passverbose=2
to have more data on how deployment goes (I recommend together with overwrite option, this way you'll be able to see every copied file). Caution, this would be very verbose. -
@juneleung Pls check your package under path:
ls test.app/Contents/PlugIns/sqldrivers libqsqlite.dylib libqsqlodbc.dylib libqsqlpsql.dylib
That's how it should be after the deploy.
You can passverbose=2
to have more data on how deployment goes (I recommend together with overwrite option, this way you'll be able to see every copied file). Caution, this would be very verbose.@artwaw
Thanks for your guide and I have generated the dylib successfully. :)in the /Applications/Postgres.app/Contents/Versions/14/lib/, my libpq.5.dylib looks is an alias, so i copy the libpq.5.14.dylib to /Users/test/Build/build-GiraffeL-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/Frameworks/libpq.5.14.dylib, is it correct to copy libpq.5.14.dylib or I should copy the libpq.5.dylib alias file .
and before running with :
cp /Applications/Postgres.app/Contents/Versions/14/lib/libpq.5.14.dylib /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/Frameworks/ install_name_tool -change /Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/PlugIns/sqldrivers/libqsqlpsql.dylib **install_name_tool -change libpq.5.dylib @executable_path/../Frameworks/libpq.5.14.dylib /Users/test/Build/build-test-Desktop_Qt_5_15_2_clang_64bit-Release/test.app/Contents/MacOS/test**
I use otool to check test.app/Contents/MacOS/test
otool -L test.app/Contents/MacOS/test
but it looks don't have the libpq.5.dylib in the print list.
is it correct to install_name_tool the libpq.5.dylib path for the test.app/Contents/MacOS/test? or another file? -
I used
Contents/Frameworks
path as it seems to be aligned with what macOS is expecting.
if you look at my example deploy script above you'll see that I copy libpq* files there.
Theninstall_name_tool
of course.If you check
otool
(and my script) you'll see exactly what needs to linked to what. -
@artwaw is correct, the application bundle has rules with regards to what goes where. See the Apple documentation.
-
@artwaw is correct, the application bundle has rules with regards to what goes where. See the Apple documentation.
-
Sorry, maybe I didn't explain clearly.
I have copied the libpq.5.dylib to the framework folder,
In your previous code
install_name_tool -change libpq.5.dylib @executable_path/../Frameworks/libpq.5.dylib appName.app/Contents/MacOS/appName
it looks like changing the link path in the app file, is this pointing to the app? Or point to another file? Cause I checked the app file (test.app/Contents/MacOS/test) by otool, but in the printed link list, I don't see any information about libpq.5 .dylib part, is this normal?
because there is no part of libpq.5.dylib, so I modified install_name_tool seems doesn't work either?
-
As already written, it's the plugin itself that you have to update. The application does not link nor care about libpsql.
-
As already written, it's the plugin itself that you have to update. The application does not link nor care about libpsql.
Thanks for your patient guidance and finally I solve this issue. The reason happened cause I don't copy all dylib and relink them.
also this link help me to find other dylib which needed, hope this will help other guys who also face this problem.
https://bugreports.qt.io/browse/QTBUG-85500:D
Thanks again!!