Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- a.c:
- #include <stdio.h>
- #include <dlfcn.h>
- #include <assert.h>
- int external()
- {
- return 5;
- }
- int main()
- {
- int (*ptr)();
- void *handle = dlopen("./libb.so", RTLD_LAZY|RTLD_GLOBAL);
- if (!handle)
- {
- fprintf(stderr, "%s\n", dlerror());
- return 1;
- }
- #ifdef __FreeBSD__
- ptr = (int (*)())dlfunc(handle, "fun");
- #else
- ptr = (int (*)())dlsym(handle, "fun");
- #endif
- printf("%d\n", (*ptr)());
- return 0;
- }
- b.c:
- extern int external();
- int fun()
- {
- return external();
- }
- FreeBSD:
- [sysnet80:/tmp] steve$ uname -s -r
- FreeBSD 9.1-PRERELEASE
- [sysnet80:/tmp] steve$ clang -fPIC a.c
- [sysnet80:/tmp] steve$ clang -fPIC -c b.c
- [sysnet80:/tmp] steve$ clang -shared -o libb.so b.o
- [sysnet80:/tmp] steve$ ./a.out
- ./libb.so: Undefined symbol "external"
- Linux:
- [hilbert:/tmp] steve$ uname -s -r
- Linux 2.6.35-28-generic
- [hilbert:/tmp] steve$ clang -fPIC a.c -ldl
- [hilbert:/tmp] steve$ clang -fPIC -c b.c
- [hilbert:/tmp] steve$ clang -shared -o libb.so b.o
- [hilbert:/tmp] steve$ ./a.out
- ./a.out: symbol lookup error: ./libb.so: undefined symbol: external
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement