Compilation problem on Qt c++ on mac os x 10.8.5
-
Hello,
I did some research on google, developers suggests that we have to avoid use DYLD_LIBRARY_PATH because there is dynamic-linking-conflict between different libjpeg dynamic libraries on OSX . ("Conflict between dynamic linking priority in OSX?":http://stackoverflow.com/questions/17643509/conflict-between-dynamic-linking-priority-in-osx)
-
Indeed, that's why I generally ensure that common dependencies I might have between libraries comes from a common place
-
Hello,
I resolved the problem by put the library given in the SDK on the project folder. But, really I can not why when I configure it like:
@DYLD_LIBRARY_PATH=/opt/local/bin@ it did not work and I get an error like @dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /opt/local/lib//libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO@
but when I copied the library form /opt/local/bin to the project folder, it work fine ??!! Any explication please ? -
@DYLD_LIBRARY_PATH=/opt/local/bin@
you are pointing to the bin folder, the dylibs are in
@DYLD_LIBRARY_PATH=/opt/local/lib@
-
Hello,
Sorry, I made a mistake in my last post.
In fact, I put@ DYLD_LIBRARY_PATH=/opt/local/lib@ but it does not work but when I copied the library form /opt/local/lib to the project folder, it work fine ??!! Any explication please ?
-
Have a look at your application with otool -L you'll see what is linked.
Then you also have the search order which is important
-
Hello,
I run this command@otool -L main .o@
but I did not get any output ? -
Not on main.o on the executable generated
-
Hello,
I run @otool -L ListAllPrsilicaCameras@
I get these output:
@ListAllPrsilicaCameras:
libPvAPI.dylib (compatibility version 0.0.0, current version 0.0.0)
libPvJNI.dylib (compatibility version 0.0.0, current version 0.0.0)
/opt/local/lib/libjpeg.9.dylib (compatibility version 11.0.0, current version 11.0.0)
/Users/kifaraaouig/Qt/5.2.0/clang_64/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.2.0, current version 5.2.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)@
I remark that the problem is in
@libPvAPI.dylib@When i put @DYLD_LIBRARY_PATH=/opt/local/lib@
I get the error mentioned earlier but when I changed it like:
@DYLD_LIBRARY_PATH=the project folder@
What is the problem ?
-
Hi, welcome to Mac's version of DLL hell :-)
I think it's because your app's otool -L references /opt/local/lib/libjpeg.9.dylib and otool -L on Apple's ImageIO.Framework (the one that gave the error message on Page 1) references /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib.
When you use the copied DLLs in your project's folder, I think the ImageIO.Framework loads Apple's libpjpeg.dylib and all is ok, but maybe in /opt/local/lib there's a symbolic link called libpjpeg.dylib, so in that case ImageIO.Framework thinks /opt/local/lib's libpjpeg.dylib is kosher to use (and hence the error, because it's not).
Make sense? Anyway I think you need a more complete understanding exactly what dlls/dylibs are loaded. You can try with the lsof utility like this (first start your app and then open Terminal and type lsof -c and the first few letters of your app):
lsof -c ListAOr lsof -c ListA | sort
(in this case it's useful with a big Terminal window :-) -
To trace what shared libraries get loaded in which order see:
@man dyld@
more precisely the variable DYLD_PRINT_LIBRARIES
in short:
@export DYLD_PRINT_LIBRARIES=1
/path/to/your/app
@ -
Hello,
At the end, it is impossible to fix that in the case of
@ DYLD_LIBRARY_PATH=/opt/local/lib@