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> 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 >>>> >>>> >> >