Re: ECL + EQL Standalone Binary
Joshua Kordani <[email protected]>
| Newsgroups | gmane.lisp.ecl.general |
|---|---|
| Message-ID | <[email protected]> |
John, I think Pascal means that you will need to use (cffi:load-library "path/to/library") in your code, and if you happen to bundle your dylibs with your .app then you can at least find them there. One problem that I haven't found a good answer to is if your libs have explicit path references to other libraries, with otool -L. I would assume you would need to use a tool to rewrite the library names so that they are all consistent for your desired deployment target fs paths and libs. If I am wrong someone please correct me. Josh Kordani On 9/25/17 7:15 PM, John Mercouris wrote: > Hi Pascal, > > If I don’t use the install_name_tool, and I just leave the compiled > binary without changing the paths to QT or anything, it all runs fine. > The issue is, I need to copy the libraries into my application bundle > to make it easy to distribute for OS X, > > Can you explain what you mean how I may load the libraries at > run-time? I looked up CFFI and all I came up with was C Foreign > Function Interface, > > Thanks for your help, > > -John >> On Sep 25, 2017, at 18:07, Pascal Bourguignon <pjb-jNDFPZUTrfRkIYSJMME8NAC/[email protected] >> <mailto:pjb-jNDFPZUTrfRkIYSJMME8NAC/[email protected]>> wrote: >> >> >>> On 26 Sep 2017, at 00:41, John Mercouris <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> Hi Pascal, I’ve done exactly as you said and have the following output: >>> >>> <output.pdf> >> >> (format nil "~x"(+ 1025 #xe70)) —> "1271" >> >> Since it looks like the functions around this address are unrelated >> to file accesses, then we may suppose that we have an error due to >> the modifications made by install_name_tool to the binary. >> >> >> Try without using this tool. >> >> If my hypothesis is correct, you will have to load the libraries >> explicitely at run-time as we’ve always done with cffi… >> >> >> >>> Honestly, I’m not sure what to make of it, it looks very similar to >>> your output as well, >>> >>> -John >>>> On Sep 25, 2017, at 16:58, Pascal Bourguignon >>>> <pjb-jNDFPZUTrfRkIYSJMME8NAC/[email protected] <mailto:pjb-jNDFPZUTrfRkIYSJMME8NAC/[email protected]>> wrote: >>>> >>>> >>>> >>>> >>>>> On 25 Sep 2017, at 22:47, John Mercouris <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> Hi Pascal, >>>>> >>>>> Thank you for your email, >>>>> >>>>> 1. You’re correct, I had to manually copy the libraries in to the >>>>> app bundle, I just did something like: >>>>> >>>>> > cp /usr/local/lib/libeql5.1.dylib ./next.app/Contents/Frameworks/ >>>>> >>>>> 2. I saw the message is within ECL, I found the exact file with >>>>> the error message, it is located in ecl/src/c/unixint.d >>>>> >>>>> I figured my problem was unrelated to the libraries, but I wasn’t >>>>> 100% sure, just wanted to include all information, >>>>> >>>>> 3. I have no idea how to read assembly, I mean I can pick through >>>>> it, but I won’t be able to really understand what’s going on, nor >>>>> would I know how to even attach a debugger to the process, are >>>>> there any other ways that I can examine what’s going on? A source >>>>> file I can look at? Should I be looking for issues within ECL or EQL? >>>> >>>> You don’t need to understand the assembly code; you can just watch >>>> the name of the functions around the indicated location. >>>> >>>> In the case of my version of libecl, I would find: >>>> >>>> [pjb@despina :0.0 documentation]$ otool -t -v -V >>>> /opt/local/lib/libecl.dylib|grep -A300 -e '^_cl_boot:' >>>> _cl_boot: >>>> 0000000000001d34movl0x22ddce(%rip), %eax >>>> 0000000000001d3atestl%eax, %eax >>>> >>>> #x1d34 + 1025 = #x2135 >>>> >>>> 00000000000020e2callq0x151748 ## symbol stub for: _si_getcwd >>>> 00000000000020e7movq%rax, 0x708(%r13) >>>> 00000000000020eemovl$0x1003, %esi >>>> 00000000000020f3movl$0x1, %edx >>>> 00000000000020f8movl$0x1, %ecx >>>> 00000000000020fdmovl$0x1, %r8d >>>> 0000000000002103movl$0x1, %r9d >>>> 0000000000002109movq%r14, %rdi >>>> 000000000000210ccallq0x151814 ## symbol stub for: _si_make_vector >>>> 0000000000002111movq%rax, 0x250(%r15) >>>> 0000000000002118movl$0x4, %esi >>>> 000000000000211dmovl$0x3, %edx >>>> 0000000000002122movl$0x1, %ecx >>>> 0000000000002127movq%rax, %rdi >>>> 000000000000212acallq0x15163a ## symbol stub for: >>>> _si_fill_array_with_elt >>>> 000000000000212fmovq0x250(%r15), %rax >>>> 0000000000002136movq0x10(%rax), %rcx >>>> 000000000000213amovq%rcx, 0x240(%r15) >>>> 0000000000002141movq0x20(%rax), %rax >>>> 0000000000002145movq%rax, 0x248(%r15) >>>> 000000000000214cmovq0x320(%r15), %rax >>>> 0000000000002153movq%rax, 0x134b0(%r13) >>>> 000000000000215amovq0x22dbef(%rip), %rdx >>>> 0000000000002161movq0x22dbf0(%rip), %rcx >>>> 0000000000002168leaq0x4980(%r13), %rdi >>>> 000000000000216fmovl$0x203, %esi >>>> 0000000000002174callq0x150026 ## symbol stub for: _cl__make_hash_table >>>> 0000000000002179movq%rax, %r15 >>>> 000000000000217cmovq%r15, 0x22daad(%rip) >>>> 0000000000002183leaq_char_names(%rip), %rbx >>>> >>>> we can see that calls to SI:GETCWD, SI:MAKE-VECTOR and >>>> SI-FILL-ARRAY-WITH-ELT are made just before that address, and a >>>> call to CL:MAKE-HASH-TABLE will be called just after. >>>> >>>> So if I had the error at the same cl_boot+1025 offset, I would >>>> infer there’s some problem with the allocation of a vector. >>>> (But this is not consistent with your file not found error, so >>>> check your own copy of the library, you may find other functions >>>> around the cl_boot+1025 address). >>>> >>>> >>>> -- >>>> __Pascal J. Bourguignon__ >>> >> >