Library not found on Mac OS
I'm facing a new problem with my project and I have trouble to solve it.
I have an application that runs on Windows, and I have successfully compile it for Mac OS. The application starts but it catches me an exception "file not found: RecomputeDimBlock.tx".
This exception is launched from an ODA function (ODA is an external lib used for this project).
After some research I found that this function search the library into myapp.app/Contents/MacOS.
I placed the library into this folder but it still doesn't detect it...
I have try to follow these steps on this thread : https://forum.qt.io/topic/59209/solved-osx-deployment-fatal-error-with-dylib-library-not-loaded-image-not-found/4 but it still not find the lib.
And then I have try with the command macdeploy and I have got this error :
Error: no file at "/isr/lib/libMdCore.1.dylib"
Error: no file at "/isr/lib/libMdWidget.1.dylib"
Error: no file at "/isr/lib/libMdModels.1.dylib"
that is normal because those lib are in my debug folder, why does he looking for those lib here ?
Thanks in advance for your help !
otool -Lon these libraries to get the shared lib informations.
Here is the output
RecomputeDimBlock.tx: @loaderpath/RecomputeDimBlock.tx (compatibility version 0.0.0, current version 0.0.0) /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0) /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1404.0.0) libTD_Db.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_DbRoot.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_Gi.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_SpatialIndex.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_Ge.dylib (compatibility version 0.0.0, current version 0.0.0) libsisl.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_Root.dylib (compatibility version 0.0.0, current version 0.0.0) libTD_Alloc.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1)
I have checked, every lib listed are well placed except libSystem.B.dylib, which I cannot find on the Mac.
What version of Qt are you using ?
How did you call macdeployqt ? Also where did you call if from ?
What version of OS X are you using ?
I use Qt 5.7. I called macdeploy like that :
and I the output is :
ERROR: no file at "/usr/lib/libMdCore.1.dylib" ERROR: no file at "/usr/lib/libMdWidgets.1.dylib" ERROR: no file at "/usr/lib/libMdModels.1.dylib"
I call it from my .app directory.
I have tried to call it with -verbose=3 and here is the output : http://textup.fr/172668xw
I'm using OS X 10.11.5
Ok try with:
QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/
to your libraries .pro file
QMAKE_RPATHDIR += /path_your_libs_dir/
to your application .pro file
So, I tried that but I still got the same error with macdeploy and the same exception in my app. Maybe I did it wrong :
I add QMAKE_FLAGS_SONAME = -Wl, -install_name, @rpath/
and in my app .pro : DEPENDPATH += ../debug
I have tried to change the first one into QMAKE_FLAGS_SONAME = -Wl, -install_name, ../debug/ but still the same thing.
The exception is about RecomputeDimBlock.tx, which is not a lib from me, so I can't apply anything to it
DEPENDPATH? It's not the same thing as
Also, I'd rather try with the full path using the
I just copy/paste the wrong line, I have tested with QMAKE_DIRPATH.
It didn't change with OUT_PWD.
Maybe there is a thing to do with command install_name_tool on all library ? I will take a look on this trail
Again, it's not
erf... I should go back to school and learn to read again !
so now I have : QMAKE_RPATHDIR=OUT_PWD/../debug
but, nothing has changed
Did you forgot the double $ before
Oh... Yes... It explains why it didn't work !
The command macdeploy now works fine ! A lot a thing appeared in the .app. But the .tx is still not detected even after copying it on the right directory
Can you remind me what these .tx files are ?
In my case .tx is a lib provided by ODA library.
When my app start, I use a function "loadapp" from ODA, to load my .tx. After debugging it seams that this function is looking for the tx into <myapp.app>/Contents/MacOS directory, so I placed my lib here but it still doesn't detect it
macdeployqt won't handle them because it currently only targets .framework and .dylib.
If we want to nitpick, putting "plugin" in the MacOS folder is wrong from a bundle point of view.
You have to write a script that copies these .tx file at the right place and call install_name_tool on them to update the paths to all their dependencies (excluding the system libraries)
ok so if I understood correctly, I have to write a script that first build my .app, then copy the .tx into MacOS and finally apply install_name_tool ?
Not necessarily. I was more thinking about a post-macdeployqt script that would handle the .tx files.
ok, given that I'm an intern and my internship will end next week, I prefer writing a bash script that makes everything, that will be easier for my workmate in the future.
Is there anyway to tell Qt that it has to call this script after compiling ?
What do you mean by everything ? Run macdeployqt or build your application + macdeployqt + .tx deployment ?
Yes, after compiling, the script calls macdeployqt, and install every tx properly, the application should work after that (I hope).
For the moment I just call macdeployqt and copy every tx into MacOS.
It's been a long time since I've done this but IIRC you should be able to do that adding a custom target.
See qmake's adding custom targets documentation.
Thanks for your help ! I will take a look a that, and post another thread if I have a lot of problems.