[Olsr-dev] Loading plugin fails, undefined symbol for olsrd functions

Jonathan P. Chapman (spam-protected)
Tue Mar 23 22:03:16 CET 2010


Hi everyone!

I am working on a link quality plugin with a challenge-response
mechanism. The HELLO packet format will be incompatible with the regular
(LQ-)HELLO, so I had to write my own packet parsers etc., but I tried to
use the existing functions where it seemed appropriate.

However, I am a little stuck now. I will describe my problem with the
create_lq_hello function below, but it appears with some other functions
exactly the same way:

Since create_lq_hello is declared and defined in the lq_packet.c file
only, I declared it as an extern in my lq_challenge_plugin.c file:
extern void create_lq_hello(struct lq_hello_message *lq_hello, struct
interface *outif);

This will allow me to compile, however when I try to run olsrd including
that file, I get the following error:

---------- LOADING LIBRARY olsrd_lq_etx_challenge.so.0.1 ----------
DL loading failed: "olsrd_lq_etx_challenge.so.0.1: undefined symbol:
create_lq_hello"!

I took a look at the olsrd binary with (GNU binutils) nm and the symbol
does show up (t = The symbol is in the text (code) section.):
$ nm olsrd |grep create_lq_hello
0000000000414917 t create_lq_hello

It does not show up, when using the --extern-only flag, so I tried to
compile the function into the library.
When looking at the library with the extern, I get (U = The symbol is
undefined.):
$ nm olsrd_lq_etx_challenge.so.0.1 |grep create_lq_hello
                 U create_lq_hello

To add the respective objects, I added to the (otherwise exactly as in
lib/mini) Makefile:

SRCS +=        $(TOPDIR)/src/lq_packet.c $(TOPDIR)/src/process_package.c
HDRS +=        $(TOPDIR)/src/lq_packet.h $(TOPDIR)/src/process_package.h
OBJS = $(SRCS:%.c=%.o)

While the result looks good to me:
$ nm olsrd_lq_etx_challenge.so.0.1 |grep create_lq_hello
000000000000b877 t create_lq_hello
                 U create_lq_hello

...but I still get the same error message when trying to run olsrd :-(

Do you see or have an idea what I might have done wrong? I have to admit
that I never tried writing a library before, so don't hesitate to point
me to really stupid (possible) mistakes ;-)

Thanks and best regards!

Jonathan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 262 bytes
Desc: OpenPGP digital signature
URL: <http://lists.olsr.org/pipermail/olsr-dev/attachments/20100323/073f2956/attachment.sig>


More information about the Olsr-dev mailing list