Yes, of course it does. Open...how? You mean being able to view it's
contents in mcedit? Yes.

On Sun, Sep 3, 2017 at 7:36 AM, Ivan Vučica <i...@vucica.net> wrote:

> Let's go back :)
>
> Does /home/jamie/Developer/System/lib/libgnustep-base.so.1.24 exist? Can
> you open it?
>
> On Sun, Sep 3, 2017, 11:30 Jamie Ramone <sancom...@gmail.com> wrote:
>
>> Well, isn't this an interesting turn of events! So I tried your (Ivan's)
>> idea of looking at what the linker's doing when the binary is run. This is
>> the output:
>>      19216:
>>      19216:     file=libpoppler-cpp.so.0 [0];  needed by
>> Source/obj/WindowServer [0]
>>      19216:     find library=libpoppler-cpp.so.0 [0]; searching
>>      19216:      search path=/home/jamie/Developer/
>> System/lib/tls/x86_64:/home/jamie/Developer/System/lib/
>> tls:/home/jamie/Developer/System/lib/x86_64:/home/jamie/
>> Developer/System/lib              (LD_LIBRARY_PATH)
>>      19216:       trying file=/home/jamie/Developer/
>> System/lib/tls/x86_64/libpoppler-cpp.so.0
>>      19216:       trying file=/home/jamie/Developer/
>> System/lib/tls/libpoppler-cpp.so.0
>>      19216:       trying file=/home/jamie/Developer/
>> System/lib/x86_64/libpoppler-cpp.so.0
>>      19216:       trying file=/home/jamie/Developer/
>> System/lib/libpoppler-cpp.so.0
>>      19216:
>>      19216:     file=libpoppler-cpp.so.0 [0];  generating link map
>>      19216:       dynamic: 0x00007f8f1c191d78  base: 0x00007f8f1bf80000
>> size: 0x00000000002125d8
>>      19216:         entry: 0x00007f8f1bf885e0  phdr: 0x00007f8f1bf80040
>> phnum:                  7
>>      19216:
>>      19216:
>>      19216:     file=libgnustep-base.so.1.24 [0];  needed by
>> Source/obj/WindowServer [0]
>>      19216:     find library=libgnustep-base.so.1.24 [0]; searching
>>      19216:      search path=/home/jamie/Developer/System/lib
>> (LD_LIBRARY_PATH)
>>      19216:       trying file=/home/jamie/Developer/
>> System/lib/libgnustep-base.so.1.24
>>      19216:      search cache=/etc/ld.so.cache
>>      19216:      search path=/lib/x86_64-linux-gnu/
>> tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux-gnu/
>> x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/tls/
>> x86_64:/usr/lib/x86_64-linux-gnu/tls:/usr/lib/x86_64-linux-
>> gnu/x86_64:/usr/lib/x86_64-linux-gnu:/lib/tls/x86_64:/
>> lib/tls:/lib/x86_64:/lib:/usr/lib/tls/x86_64:/usr/lib/tls:/
>> usr/lib/x86_64:/usr/lib            (system search path)     19216:
>> trying file=/lib/x86_64-linux-gnu/tls/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/x86_64-linux-gnu/
>> tls/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/x86_64-linux-gnu/
>> x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/x86_64-linux-gnu/
>> libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/x86_64-linux-
>> gnu/tls/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/x86_64-linux-
>> gnu/tls/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/x86_64-linux-
>> gnu/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/x86_64-linux-
>> gnu/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/tls/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/tls/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/lib/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/tls/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/tls/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/x86_64/libgnustep-base.so.1.24
>>      19216:       trying file=/usr/lib/libgnustep-base.so.1.24
>>      19216:
>>
>> It's not finding libgnustep-base.so.1.24, but we knew that. Yet I had
>> been using GNUstep apps with no problem. So I checked doing openapp
>> LevelEditor and it worked fine, as I expected, and spewed out some 27 MB of
>> diagnostic messages to the console. Clearly it was finding
>> libgnustep-base.so.1.24. So why did the app work but not my binary. I tried
>> running LevelEditor directly. Then this happened:
>>
>> LD_DEBUG=all ~/Developer/System/bin/LevelEditor
>>      19318:
>>      19318:     file=libxmp.so.4 [0];  needed by
>> /home/jamie/Developer/System/bin/LevelEditor [0]
>>      19318:     find library=libxmp.so.4 [0]; searching
>>      19318:      search path=/home/jamie/Developer/
>> System/lib/tls/x86_64:/home/jamie/Developer/System/lib/
>> tls:/home/jamie/Developer/System/lib/x86_64:/home/jamie/
>> Developer/System/lib              (LD_LIBRARY_PATH)
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/tls/x86_64/libxmp.so.4
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/tls/libxmp.so.4
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/x86_64/libxmp.so.4
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/libxmp.so.4
>>      19318:
>>      19318:     file=libxmp.so.4 [0];  generating link map
>>      19318:       dynamic: 0x00007f67633cbdc0  base: 0x00007f6763167000
>> size: 0x00000000002661e0
>>      19318:         entry: 0x00007f676316c2e0  phdr: 0x00007f6763167040
>> phnum:                  7
>>      19318:
>>      19318:
>>      19318:     file=libsndfile.so.1 [0];  needed by
>> /home/jamie/Developer/System/bin/LevelEditor [0]
>>      19318:     find library=libsndfile.so.1 [0]; searching
>>      19318:      search path=/home/jamie/Developer/System/lib
>> (LD_LIBRARY_PATH)
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/libsndfile.so.1
>>      19318:
>>      19318:     file=libsndfile.so.1 [0];  generating link map
>>      19318:       dynamic: 0x00007f6763163d70  base: 0x00007f6762eff000
>> size: 0x0000000000267f20
>>      19318:         entry: 0x00007f6762f057c0  phdr: 0x00007f6762eff040
>> phnum:                  7
>>      19318:
>>      19318:
>>      19318:     file=libao.so.4 [0];  needed by
>> /home/jamie/Developer/System/bin/LevelEditor [0]
>>      19318:     find library=libao.so.4 [0]; searching
>>      19318:      search path=/home/jamie/Developer/System/lib
>> (LD_LIBRARY_PATH)
>>      19318:       trying file=/home/jamie/Developer/System/lib/libao.so.4
>>      19318:      search cache=/etc/ld.so.cache
>>      19318:       trying file=/usr/lib/x86_64-linux-gnu/libao.so.4
>>      19318:
>>      19318:     file=libao.so.4 [0];  generating link map
>>      19318:       dynamic: 0x00007f6762efdda8  base: 0x00007f6762cf6000
>> size: 0x00000000002087a8
>>      19318:         entry: 0x00007f6762cf7e70  phdr: 0x00007f6762cf6040
>> phnum:                  7
>>      19318:
>>      19318:
>>      19318:     file=libgnustep-gui.so.0.25 [0];  needed by
>> /home/jamie/Developer/System/bin/LevelEditor [0]
>>      19318:     find library=libgnustep-gui.so.0.25 [0]; searching
>>      19318:      search path=/home/jamie/Developer/System/lib
>> (LD_LIBRARY_PATH)
>>      19318:       trying file=/home/jamie/Developer/
>> System/lib/libgnustep-gui.so.0.25
>>      19318:      search cache=/etc/ld.so.cache
>>      19318:      search path=/lib/x86_64-linux-gnu/
>> tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux-gnu/
>> x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/tls/
>> x86_64:/usr/lib/x86_64-linux-gnu/tls:/usr/lib/x86_64-linux-
>> gnu/x86_64:/usr/lib/x86_64-linux-gnu:/lib/tls/x86_64:/
>> lib/tls:/lib/x86_64:/lib:/usr/lib/tls/x86_64:/usr/lib/tls:/
>> usr/lib/x86_64:/usr/lib            (system search path)     19318:
>> trying file=/lib/x86_64-linux-gnu/tls/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/x86_64-linux-gnu/
>> tls/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/x86_64-linux-gnu/
>> x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/x86_64-linux-gnu/
>> libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/x86_64-linux-
>> gnu/tls/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/x86_64-linux-
>> gnu/tls/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/x86_64-linux-
>> gnu/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/x86_64-linux-
>> gnu/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/tls/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/tls/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/lib/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/tls/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/tls/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/x86_64/libgnustep-gui.so.0.25
>>      19318:       trying file=/usr/lib/libgnustep-gui.so.0.25
>>      19318:
>> /home/jamie/Developer/System/bin/LevelEditor: error while loading shared
>> libraries: libgnustep-gui.so.0.25: cannot open shared object file: No such
>> file or directory
>>
>> So it's not finding gnustep libs (gui in this case) it on its own, but
>> when loaded via openapp it does. To confirm this I ran openapp with no
>> arguments. It would spit out a message about its usage and exit, but should
>> load gui and/or base. Sure enough, when I run that command I get the same
>> 27 MB of diagnostic messages. So I tried running my program via opentool.
>> Now I'm getting a segfault, this means it's running. I'll sort out the
>> cause of the segfault but I'm puzzled as to why openapp and opentool seem
>> to have this "linker independence".
>>
>>
>> On Sun, Aug 27, 2017 at 7:26 PM, Jamie Ramone <sancom...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Sun, Aug 27, 2017 at 3:44 PM, Ivan Vučica <i...@vucica.net> wrote:
>>>
>>>> Based on your makefile, I suspect you may have installed GNUstep's
>>>> libraries into ${HOME}/Developer/System/lib, and have not taught the
>>>> dynamic loader where to find the .so. Just because you've linked with the
>>>> .a/.so correctly does not mean dynamic loader knows where to find the .so
>>>> at runtime.
>>>>
>>>
>>> Well, yes. I don't like to mix it with system components lest installing
>>> other things stomp all over it. I don't trust Ubuntu. But it's weird 'cause
>>> it works just fine the way I have it set up with everything else that uses
>>> GNUstep (TextEditor, PicoPixel, Terminal, etc)
>>>
>>>
>>>> That is: Is the path to libgnustep-base.so* specified in
>>>> /etc/ld.so.conf (or in a file in /etc/ld.so.conf.d)? Which
>>>> libgnustep-base.so.1.24 is specified in the binary (use ldd on your
>>>> binary)? I would not put something in ${HOME} into /etc/ld.so.conf, but it
>>>> can be useful for diagnostics. You can also set LD_LIBRARY_PATH environment
>>>> variable to expand the search path of the dynamic loader. See
>>>> https://linux.die.net/man/8/ld.so
>>>>
>>>
>>> I've had LD_LIBRARY_PATH set to /home/jamie/Developer/System/lib for a
>>> long time. GNUstep is installed into /home/jamie/Developer/System/ (i.e.
>>> /home/jamie/Developer/System/LocalApps, 
>>> /home/jamie/Developer/System/LocalLibrary,
>>> /home/jamie/Developer/System/SystemApps, 
>>> /home/jamie/Developer/System/SystemDeveloper,
>>> and /home/jamie/Developer/System/SystemLibrary). GNUstep is not and
>>> never was IN the linker's path. I just assumed this was taken care of by
>>> GNUstep.sh (called at session start), since everything just worked
>>>
>>>
>>>> Or, if what I suggest is not the case, try setting environment variable
>>>> LD_DEBUG to value 'all' (no quotes) and try running your binary to see what
>>>> the dynamic loader is doing.
>>>>
>>> Or, you can strace your binary and see which paths to
>>>> libgnustep-base.so.1.24 are being open()ed.
>>>>
>>>
>>> I'll try that, thanx.
>>>
>>>
>>>>
>>>> On Sun, Aug 27, 2017 at 6:49 PM Jamie Ramone <sancom...@gmail.com>
>>>> wrote:
>>>>
>>>>> OK, it seems to compile well if poppler if if comes before base
>>>>> (ADDITIONAL_TOOLS_LIBS) and before the objective c runtime lib
>>>>> (ADDITIONAL_OBJC_LIBS), but not before everything (using
>>>>> ADDITIONAL_LDFLAGS). But now, no matter the order, it can't start, 
>>>>> claiming
>>>>> that it can't find libgnustep-base.so.1.24. What things can cause this 
>>>>> kind
>>>>> or error?
>>>>>
>>>>> On Sun, Aug 27, 2017 at 9:42 AM, David Chisnall <thera...@sucs.org>
>>>>> wrote:
>>>>>
>>>>>> On 27 Aug 2017, at 13:29, Jamie Ramone <sancom...@gmail.com> wrote:
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> > On Sun, Aug 27, 2017 at 5:05 AM, David Chisnall <thera...@sucs.org>
>>>>>> wrote:
>>>>>> > Most of the code that I’ve written recently using GNUstep has been
>>>>>> Objective-C++, so I can confirm that this work well (though I’m not using
>>>>>> gcc, where I believe Objective-C++ still has some rough corners).  
>>>>>> Looking
>>>>>> at your nm output, it appears as if the symbols are actually there (at
>>>>>> least, `_ZN7poppler5imageC2Ev` demangles to `poppler::image::image()`,
>>>>>> which is one of the missing symbols.
>>>>>> >
>>>>>> > Your nm output looks like it’s from a .a file though, not a .so.
>>>>>> When resolving symbols in static libraries, GNU linkers only look 
>>>>>> forwards
>>>>>> in the command line, so if you specify `ld a.a b.a` then undefined 
>>>>>> symbols
>>>>>> in `a.a` will be resolved to point to `b.a`, but undefined symbols in 
>>>>>> `b.a`
>>>>>> will not be resolved to point to `a.a`.  You can solve this by either
>>>>>> providing the libraries twice (e.g. `ld a.a b.a a.a b.a`), or by using
>>>>>> --start-group and --end-group (e.g. `ld --start-group a.a b.a
>>>>>> --end-group`), which searches the archives in the group exhaustively 
>>>>>> until
>>>>>> it stops resolving all of the symbols.  Or you can use lld, which doesn’t
>>>>>> have this braindead behaviour (which is both user hostile and increases 
>>>>>> the
>>>>>> algorithmic complexity of linking).
>>>>>> >
>>>>>> > No, I specifically typed in "nm 
>>>>>> > ~/Developer/System/lib/libpoppler-cpp.so",
>>>>>> so it's not a static lib. Furthermore, I didn't use the -static flag
>>>>>> anywhere, and the libs included are done so using -lib_in_question, which
>>>>>> is only fore shared libs (static ones are just globed onto the collection
>>>>>> of object files during the link stage i.e. gcc a.o b.o c.o static_lib.a,
>>>>>> which I don't know how to do in GNUstep make).
>>>>>> >
>>>>>> > I’ve found in the past that GNUstep Make’s interfaces for adding
>>>>>> linker flags leaves a lot to be desired, because it doesn’t give much
>>>>>> control over where things go on the linker command line, but I believe 
>>>>>> that
>>>>>> using the relevant ADDITIONAL_*_LIBS variable will put the -lpoppler-cpp
>>>>>> flag at the end of the linker command line, which will make it work.
>>>>>> >
>>>>>> > Is there one for C++ libs? I checked the docs and it mentions GUI,
>>>>>> OBJC, and TOOLS. These indicate where, relative to the GNUstep libs in 
>>>>>> the
>>>>>> command line the added libs would go, but I'm not sure where I should put
>>>>>> it. I guess it's time to experiment with these...
>>>>>>
>>>>>> The linker doesn’t know or care what language the libraries are
>>>>>> written in.  The GUI, OBJC, and TOOLS refer to the kind of thing you are
>>>>>> building (thing that uses AppKit, thing that doesn’t use Foundation or
>>>>>> AppKit, thing that uses only Foundatiion), not the kind of thing that you
>>>>>> are linking it with.
>>>>>>
>>>>>> David
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> Gnustep-dev mailing list
>>>>> Gnustep-dev@gnu.org
>>>>> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>>>>>
>>>>
>>>
>>
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to