-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 30.11.2014 19:59, ba_f wrote:
Hello,
Debugging quickfix: link your program statically to identify the faulty location.
Unfortunately, no success neither.
I made libClients.a link with myClient. Still there is some dynamic linking, i couldn't get rid of. And MODE=shared must be set to build successfully. Is there a file, listing all files for the Linker? Maybe i could check there which .so is needed for building.
No .so files are needed for static linking. What error are you getting if you remove MODE=shared?
Objdump gives me the following, but i guess that comes from MODE=shared:
NEEDED libc_be_sig.so NEEDED libpthread.so NEEDED libld-l4.so NEEDED libdl.so NEEDED libc_support_misc.so NEEDED libc_be_socket_noop.so NEEDED lib4re-util.so NEEDED libc_be_l4refile.so NEEDED libc_be_l4re.so NEEDED libsupc++.so NEEDED libuc_c.so NEEDED lib4re.so NEEDED libl4util.so NEEDED libl4sys.so
Anyway...
There are static library equivalents for all those. Sounds like setting the proper REQUIRES_LIBS in your Makefile should do the trick.
Alternative (not recommended before you tried the quickfix): obtain dynamic loading info using the LD_DEBUG environment variable and figure out which library gets mapped to the respective address.
...this looks promising.
But, do you know how to get the output of LD_DEBUG? I run on an embedded ARM with UART-output.
I set 'LD_DEBUG=all' in the Makefile of myClient. Normally, i'd specify the output there. E.g. 'LD_DEBUG=all cat'
LD_DEBUG is an environment variable, so specifying it at compile time in the Makefile is not useful. Instead, add it as an environment variable to your setup:
L4.default_loader.start( { caps ...}, "rom/myProgram", { LD_DEBUG=all } };
Again, I would go for the static linking route.
Bjoern