Hi Joshua, sorry for the double email, it occurred to me to list the dependencies as well:
> otool -L libeql5.1.0.0.dylib libeql5.1.0.0.dylib: libeql5.1.dylib (compatibility version 1.0.0, current version 1.0.0) @libdir@/libecl.16.1.dylib (compatibility version 16.1.3, current version 0.0.0) /opt/local/libexec/qt5/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.8.0, current version 5.8.0) /opt/local/libexec/qt5/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.8.0, current version 5.8.0) /opt/local/libexec/qt5/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.8.0, current version 5.8.0) /opt/local/libexec/qt5/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.8.0, current version 5.8.0) /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.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/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0) > otool -L libecl.16.1.3.dylib libecl.16.1.3.dylib: @libdir@/libecl.16.1.dylib (compatibility version 16.1.3, current version 0.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.51.1) Could it be that when I use install_name_tool and change the binary, it cannot find @libdir@/libecl? -John > On Sep 26, 2017, at 11:30, John Mercouris <jmercou...@gmail.com> wrote: > > Hi Joshua, > > Very interesting article that you sent, interested in seeing exactly what the > shared libraries were reporting as their names, I got the following: > > > otool -D libecl.16.1.3.dylib > libecl.16.1.3.dylib: > @libdir@/libecl.16.1.dylib > > > otool -D libeql5.1.0.0.dylib > libeql5.1.0.0.dylib: > libeql5.1.dylib > > Why is the directive for ECL say @libdir@? Is there a way for me to change > it? Should I reinstall ECL in a different way? > > -John > >> On Sep 26, 2017, at 10:45, Joshua Kordani <jkord...@lsa2.com >> <mailto:jkord...@lsa2.com>> wrote: >> >> The behavior you're seeing r.e @executable_path et al is osx behavior. I >> can't find a list of all of the supported "macros" but this >> <https://blogs.oracle.com/dipol/dynamic-libraries,-rpath,-and-mac-os> gives >> an example of what is going on. >> >> Loosely, executables have the paths to the dylibs they depend on baked into >> them at compile time. Usually this results in explicit paths being baked >> in, even if you specified a symbolic link at link time. The final path of >> the real dylib gets baked into the executable. Osx supports some run time >> indirection in a few ways, one of which is to allow for macros in the paths >> to be expanded. Barring an authoritative source for the true meanings, I >> supposed that @executable_path just causes the dynamic linker to expand that >> into the path the binary was run from, after which the full pathname to the >> true location is resolved and the library loaded. Errors here though >> usually result in "dylib not found errors", but occasionally if this isn't >> understood, the wrong version of a library could be loaded at runtime, >> confusing the issue. >> >> On 9/26/17 11:15 AM, John Mercouris wrote: >>> Hi Paul, >>> >>> I’ve commented out the line: EQL::ini(argv); >>> >>> But I still haven’t had any luck with the standalone binary. I can get >>> compilation to work if I don’t move my dylibs into my application bundle. >>> The problem is that it’ll run just fine on my computer, but I can’t easily >>> distribute it because other users would have to still install ECL and EQL. >>> >>> I’m not sure how it happens, but somehow in the process of copying the >>> dylibs into my application bundle, this causes the program to break and >>> produce this very strange error. >>> >>> Using the macdeployqt tool to copy the dependencies automatically seems to >>> work with external libraries, at least it works with EQL, what I can’t >>> figure out is why for ECL otool reports: >>> >>> > otool -L next.app/Contents/MacOS/next >>> @libdir@/libecl.16.1.dylib (compatibility version 16.1.3, current version >>> 0.0.0) >>> >>> I’m not sure what @libdir@ is, probably some make directive, if I run a >>> more verbose form of macdeployqt, I get some interesting output: >>> >>> > macdeployqt ./next.app/ -libpath=/usr/local/lib -verbose=3 >>> Log: Framework name "libecl.16.1.dylib" >>> Framework directory "/@libdir@/" >>> Framework path "/@libdir@/libecl.16.1.dylib" >>> <mailto:/@libdir@/libecl.16.1.dylib> >>> Binary directory "/@libdir@/" >>> Binary name "libecl.16.1.dylib" >>> Binary path "/@libdir@/libecl.16.1.dylib" >>> <mailto:/@libdir@/libecl.16.1.dylib> >>> Version "" >>> Install name "" >>> Deployed install name "@executable_path/../Frameworks/libecl.16.1.dylib" >>> Source file Path "/@libdir@/libecl.16.1.dylib" >>> <mailto:/@libdir@/libecl.16.1.dylib> >>> Framework Destination Directory (relative to bundle) "Contents/Frameworks/" >>> Binary Destination Directory (relative to bundle) "Contents/Frameworks/“ >>> >>> The real question I have is, why is ECL reporting such strange directories? >>> Obviously with a directory like: /@libdir@/, macdeployqt doesn’t resolve >>> the proper location to get the dylibs, copy and re-link them. >>> >>> For EQL it appears to be working perfectly fine: >>> >>> Log: inspecting "/usr/local/lib/libeql5.1.dylib" >>> Log: Adding framework: >>> Log: Framework name "libeql5.1.dylib" >>> Framework directory "/usr/local/lib/" >>> Framework path "/usr/local/lib/libeql5.1.dylib" >>> Binary directory "/usr/local/lib/" >>> Binary name "libeql5.1.dylib" >>> Binary path "/usr/local/lib/libeql5.1.dylib" >>> Version "" >>> Install name "libeql5.1.dylib" >>> Deployed install name "@executable_path/../Frameworks/libeql5.1.dylib" >>> Source file Path "/usr/local/lib/libeql5.1.dylib" >>> Framework Destination Directory (relative to bundle) "Contents/Frameworks/" >>> Binary Destination Directory (relative to bundle) "Contents/Frameworks/" >>> >>> I have a suspicion that if I can fix this, I can make the binary work. >>> There is absolutely no reason that copying the dylib files should break the >>> binary. One thing that makes me suspicious is that libecl.16.1.dylib is a >>> symlink whereas libeql5.1.dylib is not a symlink. I wanted to make the >>> program use libel.16.1.3.dylib, but I wasn’t sure how to force it to do >>> that, >>> >>> Anyways, thank you to everyone who has offered your help and support! >>> >>> -John >>> >>> ------------------------------------------------------------------------ >>> Reference: >>> ------------------------------------------------------------------------ >>> Contents of /usr/local/lib: >>> drwxr-xr-x 55 root wheel 1870 Apr 16 03:55 ecl-16.1.3 >>> -rwxr-xr-x 1 root wheel 3424316 Apr 16 03:55 libecl.16.1.3.dylib >>> lrwxr-xr-x 1 jmercouris staff 19 Apr 16 03:55 libecl.16.1.dylib >>> -> libecl.16.1.3.dylib >>> lrwxr-xr-x 1 jmercouris staff 19 Apr 16 03:55 libecl.16.dylib -> >>> libecl.16.1.3.dylib >>> lrwxr-xr-x 1 jmercouris staff 19 Apr 16 03:55 libecl.dylib -> >>> libecl.16.1.3.dylib >>> -rwxr-xr-x 1 root wheel 11653432 Sep 25 19:58 libeql5.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 19 Sep 25 19:58 libeql5.1.0.dylib >>> -> libeql5.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 19 Sep 25 19:58 libeql5.1.dylib -> >>> libeql5.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 19 Sep 25 19:58 libeql5.dylib -> >>> libeql5.1.0.0.dylib >>> -rwxr-xr-x 1 root wheel 288264 May 1 16:28 >>> libeql5_webkit.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 26 May 1 16:28 >>> libeql5_webkit.1.0.dylib -> libeql5_webkit.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 26 May 1 16:28 >>> libeql5_webkit.1.dylib -> libeql5_webkit.1.0.0.dylib >>> lrwxr-xr-x 1 root wheel 26 May 1 16:28 >>> libeql5_webkit.dylib -> libeql5_webkit.1.0.0.dylib >>> >>> Contents of next.pro >>> QT += widgets printsupport uitools >>> TEMPLATE = app >>> ICON = ../assets/next.icns >>> CONFIG += no_keywords release >>> INCLUDEPATH += /usr/local/include >>> INCLUDEPATH += /usr/local/include/eql >>> LIBS += -L/usr/local/lib -lecl >>> LIBS += -L/usr/local/lib -leql5 >>> LIBS += -L. -lnext >>> TARGET = next >>> DESTDIR = ./ >>> OBJECTS_DIR = ./tmp/ >>> MOC_DIR = ./tmp/ >>> >>> SOURCES += main.cpp >>> >>> >>> >>>> On Sep 26, 2017, at 00:26, PR <polos.ru...@gmail.com >>>> <mailto:polos.ru...@gmail.com>> wrote: >>>> >>>> 2017-09-25 19:19 GMT+02:00, John Mercouris <jmercou...@gmail.com >>>> <mailto:jmercou...@gmail.com>>: >>>>> Any ideas on how to proceed would be very useful, thank you, >>>> >>>> Hi John, >>>> >>>> the only thing that currently comes to mind is trying to comment out the >>>> line >>>> >>>> EQL::ini(argv); >>>> >>>> in your main.cpp (this function simply calls cl_boot(); I remember >>>> that I needed to place it there in the past, just to be safe on all >>>> platforms. >>>> >>>> But cl_boot() will also be called later in the EQL constructor (only >>>> if it has not been called earlier). >>>> >>>> So, maybe in your situation it's better when it's called after the >>>> QApplication constructor has been called. >>>> >>>> But this is just a guess. >>>> >>>> BTW, I tried to compile it on Linux (from the sources given by you), >>>> and it worked without problems! >>>> >>>> Paul >>>> >>>> >>>> >>>>> >>>>> -John >>>>> >>>>> >>> >> >