bug in ld.so when called via dlopen()
Natanael Copa
natanael.copa at gmail.com
Thu Aug 26 18:26:17 UTC 2010
Hi,
I have an issue with lua and a lua binding to c-client[1], limap[2].
libc-client calls some callback functions supposed to be implemented
in the main application.
So various mm_* functions are implemented in limap.c as callbacks, for
example mm_dlog().
But when lua does dlopen() to load the module i get error:
lua: symbol 'mm_dlog': can't resolve symbol in lib '/usr/lib/libc-client.so.1'
I have simplified testcase here:
wget -O - http://dev.alpinelinux.org/~ncopa/uclibc-dlopen-testcase.tar.gz
| tar -zxf
Both bar and baz works with glibc and bar fails on uclibc. Might be i
do something wrong?
Pasted below:
# Makefile
run: bar baz plugin.so
LD_LIBRARY_PATH=. ./baz
LD_LIBRARY_PATH=. ./bar
bar_LDFLAGS= -ldl
bar: bar.c
$(CC) $($@_CFLAGS) -o $@ $($@_LDFLAGS) $^
baz: baz.c libfoo.so
$(CC) $($@_CFLAGS) -o $@ $($@_LDFLAGS) $^
plugin.so_LDFLAGS= -L. -lfoo
plugin.so: plugin.c libfoo.so
$(CC) $($@_CFLAGS) -fPIC -o $@ -shared $($@_LDFLAGS) $^
libfoo.so: foo.c
$(CC) $($@_CFLAGS) -fPIC -o $@ -rdynamic -shared
-Wl,-soname,libfoo.so $($@_LDFLAGS) $^
clean:
rm -f plugin.so libfoo.so bar baz
# eof
/* bar.c */
#include <stdio.h>
#include <dlfcn.h>
int main()
{
int (*run)(void) = NULL;
void *h = dlopen("./plugin.so", RTLD_NOW);
if (h == NULL)
return 1;
run = dlsym(h, "run");
return run();
}
/* eof */
/* baz.c */
#include <stdio.h>
int foo_run(void);
int foo_callback(void)
{
printf("Hello from baz foo_callback()\n");
return 0;
}
int main(void)
{
return foo_run();
}
/* eof */
/* foo.c */
#include <stdio.h>
int foo_callback(void);
int foo_run(void)
{
printf("running callback from foo_run()\n");
return foo_callback();
}
/* eof */
/* plugin.c */
#include <stdio.h>
int foo_run(void);
int foo_callback(void)
{
printf("Hello from plugin.so foo_callback()\n");
return 0;
}
int run(void) {
return foo_run();
}
int main(void)
{
return run();
}
/* eof */
--
Natanael Copa
[1] http://www.washington.edu/imap/documentation/internal.txt.html
[2] http://www.raschke.pwp.blueyonder.co.uk/limap.c
More information about the uClibc
mailing list