Library not found on Mac OS
-
Hello everyone,
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 !
-
Hi,
Call
otool -L
on 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 :
/Users/developpement/Qt/5.7/clang_64/bin/macdeployqt MediaCad.app
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:
Add
QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/
to your libraries .pro file
and
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 += ../debugI 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
-
Why
DEPENDPATH
? It's not the same thing asQMAKE_RPATHDIR
.Also, I'd rather try with the full path using the
OUT_PWD
variable withQMAKE_RPATHDIR
-
Again, it's not
QMAKE_DIRPATH
, it'sQMAKE_RPATHDIR
-
Did you forgot the double $ before
OUT_PWD
? -
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)
-
Not necessarily. I was more thinking about a post-macdeployqt script that would handle the .tx files.
-
-
What do you mean by everything ? Run macdeployqt or build your application + macdeployqt + .tx deployment ?