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