JED Text Editor: Can't access shared library

We run the JED text editor on our primary QNX6 development node and everything works fine. Currently we are trying to set up QNX6 on our target embedded system and, for convenience, I’d like to put JED there too. So far it isn’t working. When I try to run JED on the target system, it exits immediately with the following message

“sh: jed: Can’t access shared library”

Now our development node is running QNX installed from the QNX6 Momentics Pro CD so it’s pretty full-featured. Our target system, on the other hand, is significantly trimmed down. It boots a custom .boot image made from a build file that is as slim as possible. The target system boots from a “microdrive” hard disk installed in the board’s compact flash slot. On the hard drive I’ve set up many of the directories you’d expect to see on a QNX system (/lib, /lib/dll, /etc, /bin, /usr/bin, /usr/local/bin, and so on) but those directories only contain a small subset of what exists on our development system. Basically we just copied in the libraries and utilities that we wanted or needed and nothing else. Apparently we are still missing something that JED needs.

It would be nice if, when JED failed to load, it told us what libraries it’s missing but it doesn’t – just “Can’t access shared library”.

I ran

objdump -x /usr/local/bin/jed

on our development system to see what shared libraries it uses and the list I got back was

libsocket.so.1
libc.so.1
libm.so.1

In the /lib directory on our target system I have

libsocket.so.1
libsocket.so.2
libc.so.1
libc.so.2
libm.so.1
libm.so.2

and I’ve also set up the following symbolic links

libsocket.so → libsocket.so.2
libc.so → libc.so.2
libm.so → libm.so.2

which is the same set of symbolic links we have for those libraries on our development system. Even so, JED won’t start. I’ve also run objdump against the above set of shared libraries and they either don’t require any additional shared libraries themselves or they require libc.so.1/2 which already exists.

To move jed over to the target system all I did was create /usr/local and /usr/local/bin. Then I tarred up the /usr/local/jed directory from the development system and untarred it in /usr/local on the target system. That created the /usr/local/jed directory and all its files and subdirectories. I also copied the ‘jed’ executable over to /usr/local/bin (which is where it lives on our development system) and set its owner to ‘root’ and its access permissions to 775 (read, write execute for owner and group and read & execute for world).

Right now when I log into the target system the environment I get has no LD_LIBRARY_PATH variable set. Grasping at straws, I tried "export LD_LIBRARY_PATH=/lib:/lib/dll but that made no difference.

Does anyone have any ideas on what piece or pieces I’m still missing? Any help would be greatly appreciated!

Charlie Hubbard

try to “export DL_DEBUG=1” before running jed, My guess is that it tries to dlopen() something that does not exist.

Cheers,
/Johan

I did a “export DL_DEBUG=1” and then issued a ‘set’ command to verify that “DL_DEBUG=1” was in my environment. It was. But when I run ‘jed’ it still comes back with

“sh: jed: Can’t access shared library”

We’re missing something. I just don’t know what yet! If anyone has any other suggestions to try, they’d be most welcome. I have no idea what to try next.

Charlie Hubbard